UNIX 域协议

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. 代码实现


 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值