本地套接字

文件格式

  • 管道文件: P
    ls -l 第一个字符为P, 那么为管道文件
  • 套接字:S
    • 伪文件,不存在磁盘,在内核缓冲区内

有名管道用于没有血缘关系进程间通信

进程A 管道P 进程B open() 管道位于 内核缓冲区 open() 进程A 管道P 进程B

利用本地套接字建立进程间通信

sockaddr_unparamter
sun_familyAF_UNIX
char path[108]“server.sock”

Sever

//Server
//创建本地套接字文件
int lfd=socket(AF_LOCAL, sock_stream, 0); //AF_LOCAL本地套接字
//如果套接字文件存在,删除套接字文件
unlink("serv.socket");
//绑定-struct sockaddr_un------------------------------------
struct sockaddr_un serv;
serv.sun_family = AF_LOCAL;'
strncpy(serv.sun_path, "server.socket"); //当前还不存在
bind(lfd, (struct sockaddr &)*serv, len); //绑定成功后,server.socket在当前文件夹下创建OK
//设置监听
listen(lfd,36);
//等待接收请求
struct sockaddr client;
int len = sizeof(client);
int cfd = accept(lfd, &client, &len);
printf("client bind file:%s", client.sun_path); //打印客户端绑定的文件
//通信
send()
recv()
//断开连接诶
close(fd);close(lfd);

Client

//Server
//创建本地套接字文件
int fd=socket(AF_LOCAL, sock_stream, 0); //AF_LOCAL本地套接字
//如果套接字文件存在,删除套接字文件
unlink("client.socket");
//绑定套接字文件
struct sockaddr_un client;
client.sun_family = AF_LOCAL;'
strncpy(client.sun_path, "client.socket"); //当前还不存在
bind(fd, (struct sockaddr &)*client, len); //绑定成功
//连接服务器
struct sockaddr_un serv;
serv.sun_family = af_local;
strcpy(serv.sun_path, "server.socket"); //绑定之前创建的server.socket文件
connet(fd,&serv,sizeof(serv));
//通信
send()
recv()
//断开连接诶
close(fd);close(lfd);
server.socketclient.socket
server操作client操作
内核server缓冲区内核client缓冲区

本地套接字实际是对映射到内核空间缓冲区的文件描述符的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值