关于详细的服务器建立的步骤以及相关的socket套接字的知识我已经在python socket编程的文章中提到过了,大家可以参看那一篇博客来历接socket套接字编程的内容,由于要是用C相关的API所以这里采用了基于C语言的socket API编写相关的网络编程内容,具体的实现如下所示,调试通过。文章链接:http://www.cnblogs.com/uestc-mm/p/7296083.html
服务端Server.c程序内容:
1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #include <netinet/in.h> 4 #include <arpa/inet.h> 5 #include <netdb.h> 6 #include <stdio.h> 7 #include <errno.h> 8 #include <stdlib.h> 9 #include <string.h> 10 #include <unistd.h> 11 /************************************************************************************************************************ 12 1、int socket(int family,int type,int protocol) 13 family: 14 指定使用的协议簇:AF_INET(IPv4) AF_INET6(IPv6) AF_LOCAL(UNIX协议) AF_ROUTE(路由套接字) AF_KEY(秘钥套接字) 15 type: 16 指定使用的套接字的类型:SOCK_STREAM(字节流套接字) SOCK_DGRAM 17 protocol: 18 如果套接字类型不是原始套接字,那么这个参数就为0 19 2、int bind(int sockfd, struct sockaddr *myaddr, int addrlen) 20 sockfd: 21 socket函数返回的套接字描述符 22 myaddr: 23 是指向本地IP地址的结构体指针 24 myaddrlen: 25 结构长度 26 struct sockaddr{ 27 unsigned short sa_family; //通信协议类型族AF_xx 28 char sa_data[14]; //14字节协议地址,包含该socket的IP地址和端口号 29 }; 30 struct sockaddr_in{ 31 short int sin_family; //通信协议类型族 32 unsigned short int sin_port; //端口号 33 struct in_addr sin_addr; //IP地址 34 unsigned char si_zero[8]; //填充0以保持与sockaddr结构的长度相同 35 }; 36 3、int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen) 37 sockfd: 38 socket函数返回套接字描述符 39 serv_addr: 40 服务器IP地址结构指针 41 addrlen: 42 结构体指针的长度 43 4、int listen(int sockfd, int backlog) 44 sockfd: 45 socket函数绑定bind后套接字描述符 46 backlog: 47 设置可连接客户端的最大连接个数,当有多个客户端向服务器请求时,收到此值的影响。默认值20 48 5、int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen) 49 sockfd: 50 socket函数经过listen后套接字描述符 51 cliaddr: 52 客户端套接字接口地址结构 53 addrlen: 54 客户端地址结构长度 55 6、int send(int sockfd, const void *msg,int len,int flags) 56 7、int recv(int sockfd, void *buf,int len,unsigned int flags) 57 sockfd: 58 socket函数的套接字描述符 59 msg: 60 发送数据的指针 61 buf: 62 存放接收数据的缓冲区 63 len: 64 数据的长度,把flags设置为0 65 *************************************************************************************************************************/ 66 int main(int argc, char *argv[]) 67 { 68 int fd, new_fd, struct_len, numbytes,i; 69 struct sockaddr_in server_addr; 70 struct sockaddr_in client_addr; 71 char buff[BUFSIZ]; 72 73 server_addr.sin_family = AF_INET; 74 server_addr.sin_port = htons(8000); 75 server_addr.sin_addr.s_addr = INADDR_ANY; 76 bzero(&(server_addr.sin_zero), 8); 77 struct_len = sizeof(struct sockaddr_in); 78 79 fd = socket(AF_INET, SOCK_STREAM, 0); 80 while(bind(fd, (struct sockaddr *)&server_addr, struct_len) == -1); 81 printf("Bind Success! "); 82 while(listen(fd, 10) == -1); 83 printf("Listening.... "); 84 printf("Ready for Accept,Waitting... "); 85 new_fd = accept(fd, (struct sockaddr *)&client_addr, &struct_len); 86 printf("Get the Client. "); 87 numbytes = send(new_fd,"Welcome to my server ",21,0); 88 while((numbytes = recv(new_fd, buff, BUFSIZ, 0)) > 0) 89 { 90 buff[numbytes] = '