UNIX 域协议

embedded/2024/9/22 15:47:21/

1. UNIX域协议

利用socket编程接口实现本地进程间通信

UNIX域协议套接字:可以使用TCP,也可以使用UDP

        SOCK_STREAM -----> TCP   面向字节流

        SOCK_DGRAM   -----> UDP  面向数据报


        UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户 / 服务通信的一种方式(IPC的一种方法)

        UNIX域数据报(SOCK_DGRAM)是可靠的,不会丢失消息

        IP协议中使用
IP地址 + 端口号标识客户端和服务端

        UNIX域协议使用普通文件系统中的路径名标识客户端和服务端

        
UNIX域协议的特点:

        和TCP比较,速度快,数据报不要传递到主机外,也不需要进行封包和拆包

        tcp/ip协议将IP地址作为通信双方的身份标识,UNIX域协议使用一个绝对路径作为IP地址。在头文件 include <sys/un.h> 中,用如下结构用来描述UNIX域协议地址:

//vim /usr/include/linux/un.h
#define UNIX_PATH_MAX 108// Unix域协议的地址结构体的具体描述
// include <sys/un.h>
struct sockaddr_un {__kernel_sa_family_t sun_family; // 协议族char sun_path[UNIX_PATH_MAX];/* Unix域协议地址,是以'\0'结束的本地文件系统中的绝对路径名,如: "/tmp/xxx.socket"*/
}

编程方法:

(1) 类似TCP

server(服务器):

        socket 创建一个套接字

        bind 一个服务器地址,等待客户端发信息,把一个套接字和服务器地址绑定到一起

        listen 监听

        accept 接收客户端连接请求

        连接成功,开始通信

        关闭

client(客户端):

        创建一个套接字

        (bind 一个本地地址,把一个套接字和本地地址绑定到一起) -----> 可以不要,内核会为你的socket指定一个地址
        初始化一个服务器地址(文件系统路径名)

        开始通信

        关闭

(2) 类似UDP

server(服务器):

        创建一个套接字

        bind 一个服务器地址,等待客户端发信息,把一个套接字和服务器地址绑定到一起

        开始通信

        关闭

client(客户端):

        创建一个套接字

        (bind 一个本地地址,把一个套接字和本地地址绑定到一起) ----> 可以不要,内核会为你的socket指定一个地址

        初始化一个服务器地址(文件系统路径名)

        开始通信

        关闭

2. 代码实现


 


http://www.ppmy.cn/embedded/87230.html

相关文章

PHP设计模式-简单工厂模式

核心&#xff1a; 一、定义一个接口类里面写规定好的方法。 interface Message{public function send(array $params);public function getMessage(array $params);public function getCode(array $params);} 二、定义产品类 、产品类继承接口类 class AlliYunSms implements …

将nvim的配置 上传gitee

首先是创建仓库 接着进入这个界面 然后是上传代码&#xff0c; 结果&#xff1a; 可以看到已经是可以了。 然后是 拉取代码进行测试。 第一次 拉取 使用 git clone .&#xff08;家里&#xff09; 做一点修改&#xff0c;然后上传。&#xff08;公司&#xff09; 然后在git pu…

聚观早报 | Meta发布Llama 3.1 405B;特斯拉发布二季度财报

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月25日消息 Meta发布Llama 3.1 405B 特斯拉发布二季度财报 NVIDIA AI Foundry上线 iPhone 16将改进内部设计 快…

[网络编程】网络编程的基础使用

系列文章目录 1、 初识网络 网络编程套接字 系列文章目录前言一、TCP和UDP协议的引入二、UDP网络编程1.Java中的UDP2.UDP回显代码案例3.UDP网络编程的注意事项 三、TCP网络编程1.TCP回显代码案例2.TCP多线程使用 总结 前言 在学习完基础的网络知识后&#xff0c;完成跨主机通…

[Mysql-DML数据操作语句]

目录 数据增加&#xff1a;INSERT 全字段插入&#xff1a; 部分字段插入&#xff1a; 一次性添加多条&#xff1a; 数据修改&#xff1a;UPDATE 数据删除&#xff1a;DELECT delete truncate drop 区别 数据增加&#xff1a;INSERT 总体格式&#xff1a;insert into 表…

【Linux】信号量与生产消费模型

我们已经实现过锁条件变量的PC模型&#xff0c; 但是BlockingQueue并不能进行生产与消费的并发&#xff0c;原因在于我们使用的是STL提供的队列&#xff0c;进行了一个适配&#xff0c;底层的实现可能会修改到成员变量造成未知的错误。 而这次我们选择使用环形队列&#xff08…

labview实现两台电脑共享变量传输及同步

因为工作需要&#xff0c;需要实现多台主机间进行数据传输&#xff0c; 有两个备选方案&#xff0c; 1&#xff1a;建立tcp&#xff0c;然后自己解包 2&#xff1a;就是通过共享变量传输 虽然共享变量也是建立在TCP/IP上面的&#xff0c;但是不用自己解包呀 关于共享变量网络上…

docker 运维查看指定应用log文件位置和名称

启动docker: systemctl start docker 停docker:systemctl stop docker 重启docker:systemctl restart docker 查看docker状态:systemctl status docker 开机启动:systemctlenable docker 查看docker概要信息:docker info 查看docker总体帮助文档:docker --help 查看docker命令帮…