SX_UNIX套接字通信_15

UNIX套接字通信的优势:

UNIX套接字通信常用于一个项目中的进程之间通信,UNIX提供了与网络套接字相似的特性,但是避免了网络延迟,提高了性能,但是它只能在同一台机器上使用,无法跨越网络的进程间通信

实例:

服务端代码:

// server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>#define SOCKET_PATH "/tmp/my_socket"int main() {struct sockaddr_un addr;int fd,cl,rc;char buffer[100];// 创建UNIX域流套接字if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {perror("socket error");exit(EXIT_FAILURE);}// 初始化地址结构memset(&addr, 0, sizeof(addr));addr.sun_family = AF_UNIX;strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);// 绑定地址unlink(SOCKET_PATH); // 确保之前的套接字文件已删除if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {perror("bind error");close(fd);exit(EXIT_FAILURE);}// 监听连接if (listen(fd, 5) == -1) {perror("listen error");close(fd);exit(EXIT_FAILURE);}// 接受客户端连接if ((cl = accept(fd, NULL, NULL)) == -1) {perror("accept error");close(fd);exit(EXIT_FAILURE);}// 读取客户端发送的消息rc = read(cl, buffer, sizeof(buffer));if (rc > 0) {printf("Received message: %s\n", buffer);} else {perror("read error");}// 关闭连接和套接字close(cl);close(fd);unlink(SOCKET_PATH); // 删除套接字文件return 0;
}

客户端代码:

// client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>// 地址要与服务器一致 
#define SOCKET_PATH "/tmp/my_socket"int main(int argc, char* argv[]) {// 判断是否有数据传输 if(argc < 2){printf("send message is null\n");return -1;}struct sockaddr_un addr;int fd,rc;char buffer[100];strcpy(buffer, argv[1]); // 创建UNIX域流套接字if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {perror("socket error");exit(EXIT_FAILURE);}// 初始化地址结构memset(&addr, 0, sizeof(addr));addr.sun_family = AF_UNIX;strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);// 连接到服务器if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {perror("connect error");close(fd);exit(EXIT_FAILURE);}// 发送消息到服务器rc = write(fd, buffer, strlen(buffer));if (rc > 0) {printf("Sent message to server: %s\n", buffer);} else {perror("write error");}// 关闭套接字close(fd);return 0;
}

注意:
服务端主要进行套接字的创建、绑定、监听,最后阻塞接收客户端的连接请求,需要注意的是UNIX套接字路径要明确文件位置,文件名可以不存在,但是父目录要存在,可以指定./路径或者为/tmp的Linux系统临时文件目录,sockaddr_un结构体只需指定地址族和路径名就可以用,客户端主要与服务端进行连接,创建套接字,设置连接条件,尝试连接即可

运行效果:

# 终端1
./server
receive msg is: 你好
# 终端2
./client 你好
sent msg to server is: 你好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机的错误计算(六十七)

摘要 计算机的错误计算&#xff08;五十六&#xff09;与&#xff08;六十六&#xff09;分别探讨了大数与 附近数的正切函数值的错误计算。本节讨论第三种类型数值&#xff1a; 附近数 的正切函数的计算精度问题。 例1. 已知 计算 先用 Go语言计算&#xff1a; packag…

STL介绍以及string类

什么是STL 是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 STL的六大组件 为什么要学习string类 C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&am…

模具监视器的技术参数有哪些

模具监视器的技术参数涵盖了多个方面&#xff0c;这些参数对于确保模具监视器的性能、稳定性和检测精度至关重要。以下是一些主要的技术参数&#xff1a; 一、显示器参数 屏幕尺寸&#xff1a;常见的模具监视器显示器尺寸为12.5英寸至13.5英寸&#xff0c;具体尺寸可能因不同…

基于RabbitMQ的消息监听器

1. 背景 机构的新增、更新、删除在微服务A中已经完成了&#xff08;微服务A已经部署&#xff0c;不能修改代码&#xff09;&#xff0c;如果在微服务A中对机构进行新增、更新、删除操作后&#xff0c;需要同步到自己的微服务B中&#xff0c;这里采用MQ消息通知的方式实现。 微…

如何建立一个既能快速记录又易于回顾的笔记系统?

在快节奏的学习和工作中&#xff0c;能够快速记录和回顾信息变得尤为重要。尤其对于编程学习者来说&#xff0c;构建一个高效、有序的笔记系统不仅可以提高学习效率&#xff0c;还能帮助我们在未来轻松回溯知识要点。本文将详细探讨如何打造一个既快速记录又易于回顾的笔记系统…

打卡第48天------单调栈

今天正式开始单调栈&#xff0c;开启新的篇章了&#xff0c;那个动态规划真的太难了。不过卡尔总结的很全面&#xff0c;真的是收获不少呀。小坚持带来大改变。加油✊ 1. 每日温度 leetcode题目链接&#xff1a;739. 每日温度 题目描述&#xff1a; 给定一个整数数组 temperat…

使用EasyExcel填充Excel并上传至OSS

在企业级应用中&#xff0c;经常需要处理数据的导入导出功能。Excel作为最常用的数据交换格式之一&#xff0c;其自动化处理尤为重要。本文将介绍如何使用EasyExcel库来填充Excel模板&#xff0c;并将生成的文件上传到对象存储服务&#xff08;OSS&#xff09;。 EasyExcel简介…

Python 异步爬虫:高效数据抓取的现代武器

标题&#xff1a;“Python 异步爬虫&#xff1a;高效数据抓取的现代武器” 在当今信息爆炸的时代&#xff0c;网络爬虫已成为数据采集的重要工具。然而&#xff0c;传统的同步爬虫在处理大规模数据时往往效率低下。本文将深入探讨如何使用 Python 实现异步爬虫&#xff0c;以提…

HTTP?HTTPS?HTTP2.0

Http HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议。它基于TCP/IP通信协议来传递数据&#xff0c;如HTML文件、图片文件等。以下是HTTP的详细解析&#xff1a; 一、HTTP的基本…

YAML在Spring Boot中的应用

1. 基本语法 YAML使用缩进来表示层级关系&#xff0c;通常使用空格进行缩进&#xff08;推荐使用2个空格&#xff09;。 基本语法示例&#xff1a; key: value nested:key: value list:- item1- item22. 配置文件命名 在Spring Boot中&#xff0c;YAML配置文件通常命名为 a…

手撕C++入门基础

1.C介绍 C课程包括&#xff1a;C语法、STL、高阶数据结构 C参考文档&#xff1a;Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …

RDKit在数据科学中的应用|药物筛选中的数据清理与标准化

在化学信息学和药物研发的过程中,分子数据的质量至关重要。数据清理与标准化是确保分子库数据一致性、可靠性和可比较性的关键步骤。RDKit 提供了丰富的工具,帮助用户清理和标准化分子数据,从而提高下游分析和建模的准确性。 1 数据清理的重要性 分子数据通常来自多种来源…

获取操作系统的信息(Go语言)

在 Go 语言中&#xff0c;你可以使用 runtime 和 os 包来查看操作系统的信息。以下是一些常见的操作系统信息获取方法&#xff1a; 1. 获取操作系统类型和架构信息 Go 的 runtime 包提供了基本的操作系统和架构信息&#xff1a; package mainimport ("fmt""r…

c_cpp_properties.json、launch.json、 tasks.json

在 Visual Studio Code 中&#xff0c;c_cpp_properties.json、launch.json 和 tasks.json 是三个重要的配置文件&#xff0c;它们的作用如下&#xff1a; c_cpp_properties.json&#xff1a; 这个文件用于配置 C/C 扩展的 IntelliSense、编译器路径和包括路径等。它帮助 VS Co…

Unity Dots学习 (一)

先学习怎么使用&#xff0c;再研究底层代码。Dots大家都有所耳闻。一直没时间研究&#xff0c;最近研究一下 看上图可知&#xff0c;哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料&#xff1a; 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…

快速搭建全向轮小车

总体介绍 使用两块ordive控制ros-mobile app进行控制&#xff0c;odrive通过python可以轻松控制&#xff0c;ros-mobile可以进行与电脑的ros连接充当一个遥控器。 记录代码 读取rosmobile的遥控数据 #!/usr/bin/env python3import threading import time from queue import…

景联文科技:图像标注的类型有哪些?

图像标注是计算机视觉领域中一个非常重要的步骤&#xff0c;它是创建训练数据集的关键组成部分&#xff0c;主要用于帮助机器学习算法理解图像内容。 以下是图像标注的一些主要类型&#xff1a; 1. 边界框标注&#xff1a; • 这是最常见的标注方式之一&#xff0c;通常用于…

多字段聚合查询在Elasticsearch中的实践

Elasticsearch是一个功能强大的搜索引擎&#xff0c;它不仅支持全文搜索&#xff0c;还提供了丰富的聚合功能。聚合可以帮助我们对数据进行分组和统计&#xff0c;从而得到有意义的分析结果。本文将通过Java代码示例&#xff0c;介绍如何在Elasticsearch中实现多字段的聚合查询…

第四范式发布AI+5G视频营销产品 助力精准获客与高效转化

产品上新 Product Release 今天&#xff0c;第四范式AI5G视频电话互动营销产品全新发布。 相较于以往销效率低、互动差、转化差的传统电话外呼和短信营销方式&#xff0c;视频电话互动营销基于AI、5G等技术&#xff0c;可让用户接听电话时观看个性化视频广告并实时互动&#xf…

Unity的UI设计

目录 创建和布局 布局与交互 性能优化 最佳实践 学习资源 Unity UI Toolkit与uGUI和IMGUI之间的具体区别和适用场景是什么&#xff1f; Unity UI Toolkit uGUI IMGUI 如何在Unity中实现响应式UI设计以适应不同设备尺寸&#xff1f; Unity UI性能优化的最新技术和方法…