以下是echo_serv.c的源码,提供创建服务端,绑定套接字到本机IP的8080端口,当收到客户端发送的字符串就在屏幕上打印出来,并且把字符串发送给客户端

1 // echo_serv.c – gcc –o s echo_serv.c 2 #include <sys/types.h> 3 #include <sys/socket.h> 4 #include <netinet/in.h> 5 #include <arpa/inet.h> 6 #include <unistd.h> 7 #include <stdio.h> 8 #include <errno.h> 9 10 #define EHCO_PORT 8080 11 #define MAX_CLIENT_NUM 10 12 13 int main() 14 { 15 int sock_fd; 16 struct sockaddr_in serv_addr; 17 int clientfd; 18 struct sockaddr_in clientAdd; 19 char buff[101]; 20 socklen_t len; 21 int closing =0; 22 int n; 23 24 /* 创建socket */ 25 sock_fd = socket(AF_INET, SOCK_STREAM, 0); 26 if(sock_fd==-1) { 27 perror("create socket error!"); 28 return 0; 29 } else { 30 printf("Success to create socket %d ", sock_fd); 31 } 32 33 /* 设置server地址结构 */ 34 bzero(&serv_addr, sizeof(serv_addr)); // 初始化结构占用的内存 35 serv_addr.sin_family = AF_INET; // 设置地址传输层类型 36 serv_addr.sin_port = htons(EHCO_PORT); // 设置监听端口 37 //serv_addr.sin_addr.s_addr = htons(INADDR_ANY); // 设置服务器地址 //用这个不能实现在不同主机上的通讯 38 serv_addr.sin_addr.s_addr = inet_addr("192.168.13.145"); // 设置服务器地址 39 40 bzero(&(serv_addr.sin_zero), 8); 41 42 /* 把地址和套接字绑定 */ 43 if(bind(sock_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr))!= 0) { 44 printf("bind address fail! %d ", errno); 45 close(sock_fd); 46 return 0; 47 } else { 48 printf("Success to bind address! "); 49 } 50 51 /* 设置套接字监听 */ 52 if(listen(sock_fd ,MAX_CLIENT_NUM) != 0) { 53 perror("listen socket error! "); 54 close(sock_fd); 55 return 0; 56 } else { 57 printf("Success to listen "); 58 } 59 60 /* 创建新连接对应的套接字 */ 61 len = sizeof(clientAdd); 62 clientfd = accept(sock_fd, (struct sockaddr*)&clientAdd, &len); 63 if (clientfd<=0) { 64 perror("accept() error! "); 65 close(sock_fd); 66 return 0; 67 } 68 69 /* 接收用户发来的数据 */ 70 while((n = recv(clientfd,buff, 100,0 )) > 0) { 71 buff[n] = '