定义
socket同样可以用于本地通信
创建套接字时使用本地协议PF_UNIX(或PF_LOCAL)。
分为流式套接字和用户数据报套接字
和其他进程间通信方式相比使用方便、效率更高
常用于前后台进程通信
本地地址结构
struct sockaddr_un // <sys/un.h>
{
sa_family_t sun_family; // 地址族 AF_UNIX
char sun_path[108]; // 自己定义的套接字文件(可以添加绝对路径)
};
填充地址结构
struct sockaddr_un myaddr;
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, “mysocket”);
unix域流式套接字
服务器
创建unix流式套接字(socket(AF_UNIX))------>指定本地的地址信息(struct sockaddr_un{})---->绑定本地的地址信息
---------->监听套接字------>链接客户端请求(信息通道打开)------->接收/发送信息
客户端
创建unix流式套接字(socket(AF_UNIX))------>指定服务器的地址信息(struct sockaddr_un{})------>请求链接服务器
---------->发送/接收信息
注意:
1.使用一个套接字通信
2.绑定之前把创建的套接字文件关闭掉(remove()) 否则导致绑定失败
服务器:
创建套接字 socket( )
填充服务器本地信息结构体 sockaddr_un
将套接字与服务器本地信息结构体绑定 bind( )
将套接字设置为被动监听状态 listen( )
阻塞等待客户端的连接请求 accept( )
进行通信 recv( )/send( )
客户端:
创建套接字 socket( )
填充服务器本地信息结构体 sockaddr_un
发送客户端的连接请求 connect( )
进行通信 send( )/recv( )
unix域数据报套接字
服务器:
创建unix域数据报套接字----->指定本地的地址信息---->绑定本地的地址信息--->接收/发送信息
客户端:
创建unix域数据报套接字---->指定服务器的地址信息---->指定本地的地址信息---->绑定本地的地址信息(要接收数据的话)
------->发送/接受信息
服务器:
创建套接字 socket( )
填充服务器本地信息结构体 sockaddr_un
将套接字与服务器本地信息结构体绑定 bind( )
进行通信 recvfrom( )/sendto( )
客户端:
创建套接字 socket( )
填充服务器本地信息结构体 sockaddr_un
填充客户端本地信息结构体 sockaddr_un
将套接字与客户端本地信息结构体绑定 bind( ) 如果不绑定,则接收不到服务器发送的数据
进行通信 sendto( )/recvfrom( )