南阳做网站的公司,wordpress 电影站主题,网站开发公司广告文案,戚墅堰做网站价格1.概述 本地套接字 1#xff1a;作用:本地的进程间通信 2.有关系的进程间通信 3.没有关系的进程间的通信 本地套结字实现流程和网络套结字实现相似#xff0c;一般采用tcp 二.通信流程
本地套结字通信的流程:1.服务器端:1.1 int fd socket(AF_UNIX/AF_LOCAL,…1.概述 本地套接字 1作用:本地的进程间通信 2.有关系的进程间通信 3.没有关系的进程间的通信 本地套结字实现流程和网络套结字实现相似一般采用tcp 二.通信流程
本地套结字通信的流程:1.服务器端:1.1 int fd socket(AF_UNIX/AF_LOCAL,SOCKET_STREAM,0)1.2 监听的套结字需要绑定本地的套结字文件struct sockaddr_un addr;绑定成功后指定的sun_path中的套结字文件会自动生成bind(fd,addr,len);1.3 监听listen(fd,100);1.4等待并接收连接请求struct sockaddr_un cliaddr;int cfd accept(fd,cliaddr,len)1.5通信recv send1.6关闭客户端1. int fd socket(AF_LOCAL,SOCKET_STREAM,0)2. 绑定成功后指定的sun_path中的套结字文件会自动生成struct sockaddr_un addr;bind(fd,addr,len)3.连接struct sockaddr_un serveraddr;connect(fd,serveraddr,len);4.通信5.关闭
三.实例代码实现
3.1 server
#include stdio.h
#include string.h
#include arpa/inet.h
#include unistd.h
#include stdlib.h#include sys/un.hint main()
{unlink(server.sock);//解决报错:bind: Address already in useint sockfd socket(AF_LOCAL,SOCK_STREAM,0);if(sockfd -1){perror(socket);exit(-1);}struct sockaddr_un server;server.sun_family AF_LOCAL;strcpy(server.sun_path,server.sock);if(bind(sockfd,(const struct sockaddr*)server,sizeof(server)) -1){perror(bind);exit(-1);}if(listen(sockfd, 100) -1){perror(listen);exit(-1);}struct sockaddr_un client;int len sizeof(client);int client_fd accept(sockfd,(struct sockaddr*)client,len);if(client_fd -1){perror(accept);exit(-1);}char recvbuff[1024] {0};char *server_data i am server;while(1){memset(recvbuff,0,sizeof(recvbuff));len recv(client_fd,recvbuff,sizeof(recvbuff),0);if(len -1){perror(recv);break;}else if(len 0){printf(客户端断开连接\n);}else if(len 0){printf(recv client data : %s\n,recvbuff);}send(client_fd,server_data,strlen(server_data),0);}close(sockfd);close(client_fd);return 0;
}
3.2 client
#include stdio.h
#include string.h
#include arpa/inet.h
#include unistd.h
#include stdlib.h
#include sys/un.hint main()
{unlink(client.sock); //解决报错:bind: Address already in useint sockfd socket(AF_LOCAL,SOCK_STREAM,0);if(sockfd -1){perror(socket);exit(-1);}struct sockaddr_un server;server.sun_family AF_LOCAL;strcpy(server.sun_path,client.sock);if(bind(sockfd,(const struct sockaddr*)server,sizeof(server)) -1){perror(bind);exit(-1);}struct sockaddr_un client;client.sun_family AF_LOCAL;memcpy(client.sun_path,server.sock,sizeof(server.sock));int len sizeof(client);int ret connect(sockfd,(const struct sockaddr*)client,len);if(ret -1){perror(connect);exit(-1);}int num 0;char buff[1024];while(1){memset(buff,0,sizeof(buff));printf(client say: %s\n,buff);sprintf(buff,hello i am clinet------%d\n,num);len send(sockfd,buff,strlen(buff)1,0);if(len -1){perror(send);break;}sleep(1);memset(buff,0,sizeof(buff));len recv(sockfd,buff,sizeof(buff),0);if(len -1){perror(recv);exit(-1);}else if(len 0){printf(服务端断开连接\n);}else if(len 0){printf(recv server data : %s\n,buff);}}close(sockfd);return 0;
}