网站制作价目表,浙江seo外包,福州网站改版,如何帮助网站吸引流量基于TCP的本地通信#xff08;服务器#xff09;#xff1a;创建流程#xff1a;一、创建字节流式套接字#xff08;socket函数#xff09;#xff1a; int sock_fd socket(AF_LOCAL,SOCK_STREAM,0);二、创建服务器和客户机的本地网络信息结构体并填充服务器本地网络信…基于TCP的本地通信服务器创建流程一、创建字节流式套接字socket函数 int sock_fd socket(AF_LOCAL,SOCK_STREAM,0);二、创建服务器和客户机的本地网络信息结构体并填充服务器本地网络信息结构体 struct sockaddr_un:本地网络信息结构体 #include sys/un.hstruct sockaddr_un {sa_family_t sun_family; //AF_LOCALchar sun_path[108]; //pathname};//填充服务器和客户机网络信息结构体struct sockaddr_un serveraddr,clientaddr;socklen_t serveraddr_len sizeof(serveraddr);socklen_t clientaddr_len sizeof(clientaddr);memset(serveraddr,0,serveraddr_len);memset(clientaddr,0,clientaddr_len);serveraddr.sun_family AF_LOCAL;strcpy(serveraddr.sun_path,./tcpserver);三、绑定字节流式套接字bind函数、 bind(sock_fd,(struct sockaddr *)serveraddr,serveraddr_len);四、设置套接字为被监听状态listen函数 listen(sock_fd,5);五、阻塞等待客户端连接accept函数 accept(sock_fd,(struct sockaddr *)clientaddr,clientaddr_len);六、服务器端收发数据recv函数、send函数 memset(buf,0,sizeof(buf));if(-1 (nbytes recv(accept_fd,buf,sizeof(buf),0))){perror(recv error);exit(-1);}else if(0 nbytes){printf(客户端[%s]断开了连接\n,clientaddr.sun_path);break;}printf(客户端[%s]发来数据[%s]\n,clientaddr.sun_path,buf);//组装应答消息strcat(buf,-------k);ret send(accept_fd,buf,sizeof(buf),0);if(-1 ret){perror(send error);exit(-1);}七、关闭套接字close函数 close(accept_fd);close(sock_fd);示例代码 #include stdio.h#include string.h#include stdlib.h#include unistd.h#include sys/socket.h#include sys/types.h#include netinet/ip.h#include sys/un.h#include arpa/inet.h#include stdbool.hint main(int argc, char const *argv[]){//创建套接字int sock_fd socket(AF_LOCAL,SOCK_STREAM,0);if(-1 sock_fd){perror(socket error);exit(-1);}//填充服务器和客户机网络信息结构体struct sockaddr_un serveraddr,clientaddr;socklen_t serveraddr_len sizeof(serveraddr);socklen_t clientaddr_len sizeof(clientaddr);memset(serveraddr,0,serveraddr_len);memset(clientaddr,0,clientaddr_len);serveraddr.sun_family AF_LOCAL;strcpy(serveraddr.sun_path,./tcpserver);//服务器绑定套接字if(-1 bind(sock_fd,(struct sockaddr *)serveraddr,serveraddr_len)){perror(bind error);exit(-1);}//设置监听状态if(-1 listen(sock_fd,5)){perror(listen error);exit(-1);}//阻塞等待客户端连接int accept_fd 0;char buf[128] {0};int nbytes 0;int ret 0;//提示信息printf(本地通信之TCP服务器启动!!!\n);while(true){ accept_fd accept(sock_fd,(struct sockaddr *)clientaddr,clientaddr_len);if(-1 accept_fd){perror(accept error);exit(-1);}//收发数据while(true){memset(buf,0,sizeof(buf));if(-1 (nbytes recv(accept_fd,buf,sizeof(buf),0))){perror(recv error);exit(-1);}else if(0 nbytes){printf(客户端[%s]断开了连接\n,clientaddr.sun_path);break;}printf(客户端[%s]发来数据[%s]\n,clientaddr.sun_path,buf);//组装应答消息strcat(buf,-------k);ret send(accept_fd,buf,sizeof(buf),0);if(-1 ret){perror(send error);exit(-1);}}close(accept_fd);}//关闭套接字close(sock_fd);return 0;}
运行结果 本地通信之TCP服务器启动!!!客户端[./tcpclient]发来数据[hello]客户端[./tcpclient]发来数据[hi]客户端[./tcpclient]发来数据[I Love China!!!]特别注意strcpy(serveraddr.sun_path,./tcpserver);中tcpserver文件是套接字文件如下所示 srwxrwxr-x 1 linux linux 0 11月 10 05:58 tcpserver