1 //server.c 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<sys/types.h> 6 #include<sys/socket.h> 7 #include<string.h> 8 #include<unistd.h> 9 #include<arpa/inet.h> 10 #include<netinet/in.h> 11 int main() 12 { 13 //服务器测试demo 14 //1 创建socket返回文件描述符 15 int lfd = socket(AF_INET,SOCK_STREAM,0); 16 if(lfd<0) 17 { 18 printf("socket create error\n"); 19 } 20 21 //2 绑定文件描述符和ip地址以及端口 22 struct sockaddr_in serv; 23 memset(&serv,0x00,sizeof(serv)); 24 serv.sin_family = AF_INET;//表示用ip4协议 25 serv.sin_port = htons(6666);//表示采用6666端口 26 // inet_pton(AF_INET,"127.0.0.1",&serv.sin_addr.s_addr); 27 serv.sin_addr.s_addr = htonl(INADDR_ANY);//表示本地可用任意ip 28 int ret =bind(lfd,(const struct sockaddr*)&serv,sizeof(serv)); 29 if(ret<0) 30 { 31 printf("bind error\n"); 32 return -1; 33 } 34 //表示绑定在本地,端口为6666,协议为ip4 35 36 //3 监听 37 listen(lfd,128); 38 39 //4 建立连接 40 int cfd = accept(lfd,NULL,NULL); 41 //这里表示只是建立连接返回一个用于该连接的socket 42 //不用返回客户端的信息 43 //这里的cfd是建立连接的socket 44 45 //5 收发数据 46 char buf[1024]; 47 int n; 48 while(1) 49 { 50 memset(buf,0x00,sizeof(buf)); 51 n = read(cfd,buf,sizeof(buf)); 52 if(n<=0) 53 { 54 printf("client close or nothing\n"); 55 break; 56 } 57 printf("n==%d,buf==%s\n",n,buf); 58 } 59 //最后关闭文件描述符 60 close(lfd); 61 close(cfd); 62 return 0; 63 }
1 //client.c 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 #include<sys/types.h> 6 #include<sys/socket.h> 7 #include<string.h> 8 #include<unistd.h> 9 #include<arpa/inet.h> 10 #include<netinet/in.h> 11 int main() 12 { 13 // int socket(int domain, int type, int protocol); 14 //创建socket套接字 15 int cfd = socket(AF_INET,SOCK_STREAM,0); 16 if(cfd<0) 17 { 18 printf("create socket error\n"); 19 } 20 21 //连接服务器 22 struct sockaddr_in serv; 23 serv.sin_family = AF_INET; 24 serv.sin_port = htons(6666); 25 inet_pton(AF_INET,"127.0.0.1",&serv.sin_addr.s_addr); 26 int ret = connect(cfd,(const struct sockaddr*)&serv,sizeof(serv)); 27 if(ret<0) 28 { 29 perror("connect error\n"); 30 return -1; 31 } 32 33 //开始读写数据 34 int n = 0; 35 char buf[1024]; 36 while(1) 37 { 38 //从标准输入中写数据给buf 39 memset(buf,0x00,sizeof(buf)); 40 n = read(STDIN_FILENO,buf,sizeof(buf)); 41 42 //发送数 43 write(cfd,buf,n); 44 //输入到cfd中 45 //读取缓冲区中的内容这里不采取 46 if(n<=0) 47 { 48 printf("read error or server close\n"); 49 break; 50 } 51 printf("n ==%d,buf==%s\n",n,buf); 52 } 53 //最后关闭套接字cf 54 close(cfd); 55 return 0; 56 }