Linux的网络socket编程
(1)TCP客户端
①代码
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#defineSERVER_PORT5000#defineSERVER_IP"192.168.1.10"intmain(void){structsockaddr_inserver_addr={0};unsignedcharbuf[512];intsockfd;intret;unsignedcharrecbuf[512];for(inti=0;i<512;i++){buf[i]=i%256;}sockfd=socket(AF_INET,SOCK_STREAM,0);if(0>sockfd){perror("socket error");exit(EXIT_FAILURE);}server_addr.sin_family=AF_INET;server_addr.sin_port=htons(SERVER_PORT);inet_pton(AF_INET,SERVER_IP,&server_addr.sin_addr);//连接客户端ret=connect(sockfd,(structsockaddr*)&server_addr,sizeof(server_addr));if(ret<0){perror("connect error");close(sockfd);exit(EXIT_FAILURE);}printf("connect ok\n\n");//发数据ret=send(sockfd,buf,sizeof(buf),0);if(0>ret){perror("send error");}//收数据memset(recbuf,0x00,sizeof(recbuf));ret=recv(sockfd,recbuf,sizeof(recbuf),0);if(0>ret){perror("recv error");}if(recbuf[0]==0xFF){printf("over\n");}close(sockfd);exit(EXIT_FAILURE);}
②测试结果
![]()
![]()
(2)TCP服务端
①代码
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#defineSERVER_PORT5000#defineSERVER_IP"192.168.1.8"intmain(void){structsockaddr_inserver_addr={0};structsockaddr_inclient_addr={0};charip_str[20]={0};unsignedcharbuf[512];intsockfd,connfd;intret;socklen_taddrled=sizeof(client_addr);unsignedcharrecbuf[512];for(inti=0;i<512;i++){buf[i]=i%256;}sockfd=socket(AF_INET,SOCK_STREAM,0);if(0>sockfd){perror("socket error");exit(EXIT_FAILURE);}server_addr.sin_family=AF_INET;server_addr.sin_port=htons(SERVER_PORT);//server_addr.sin_addr.s_addr=htonl(INADDR_ANY);inet_pton(AF_INET,"SERVER_IP",&server_addr.sin_addr);//绑定IPret=bind(sockfd,(structsockaddr*)&server_addr,sizeof(server_addr));if(ret<0){perror("bind error");close(sockfd);exit(EXIT_FAILURE);}//监听端口ret=listen(sockfd,50);if(ret<0){perror("listen error");close(sockfd);exit(EXIT_FAILURE);}//阻塞等待被连接connfd=accept(sockfd,(structsockaddr*)&client_addr,&addrled);if(connfd<0){perror("accept error");close(sockfd);exit(EXIT_FAILURE);}printf("coming...\n");inet_ntop(AF_INET,&client_addr.sin_addr.s_addr,ip_str,sizeof(ip_str));printf("%s\n",ip_str);//发送数据ret=send(connfd,buf,sizeof(buf),0);if(0>ret){perror("send error");}//接收数据memset(recbuf,0x00,sizeof(recbuf));ret=recv(connfd,recbuf,sizeof(recbuf),0);if(0>ret){perror("recv error");}if(recbuf[0]==0xFF){printf("over\n");}close(connfd);close(sockfd);exit(EXIT_FAILURE);}
③测试结果
![]()
![]()