標籤:
並發伺服器設計
採用多進程來處理
tcp_server_fork.c
1 #include <stdio.h> 2 #include <sys/socket.h> 3 #include <string.h> 4 #include <netinet/in.h> 5 6 #define portnum 3333 7 8 int main() 9 {10 int sockfd ,new_fd;11 struct sockaddr_in server_addr;12 struct sockaddr_in client_addr;13 char buffer[128];14 int nbyte;15 int sin_size;16 int pid;17 //建立通訊端18 if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)19 {20 printf("create socket error.\n");21 exit(1);22 }23 //2.1設定要綁定的地址24 bzero(&server_addr,sizeof(struct sockaddr_in));25 sockaddr_in.sin_family = AF_INET;26 sockaddr_in.sin_port = htons(portnum);//客戶機轉為網路字元序27 sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY);//客戶機轉為網路字元序28 //2.2綁定地址29 bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));30 //3.監聽連接埠31 listen(sockfd,5);32 while(1)33 {34 //4.等待串連35 sin_size = sizeof(struct sockaddr);36 new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);37 printf("server get connection from %s\n",inet_ntoa(client_addr.sin_addr));38 39 //由子進程來處理資料通訊40 if(pid = fork() == 0)41 {42 //5.接收資料43 nbyte = recv(new_fd,buffer,128,0);44 buffer[nbyte]=‘\0‘;45 printf("server received : %s\n",buffer);46 47 close(new_fd);48 close(sockfd);49 exit(0);50 }51 else if(pid <0)52 {53 printf("fork error!\n");54 }55 //6.結束串連56 colse(new_fd);57 58 }59 close(sockfd);60 61 return 0;62 }tcp_server_fork.c
tcp_client.c
1 #include <stdio.h> 2 #include <string.h> 3 #include <sys/socket.h> 4 #include <netinet/in.h> 5 6 #define portnum 3333 7 8 int main() 9 {10 struct sockaddr_in server_addr;11 int sockfd;12 char buffer[128];13 14 //1.建立通訊端15 if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)16 {17 printf("create socket error.\n");18 exit(1);19 }20 //2.1設定要連結的伺服器的地址21 bzero(&server_addr,sizeof(struct sockaddr_in));22 server_addr.sin_family = AF_INET;23 server_addr.sin_port = htons(portnum);24 server_addr.sin_addr.s_addr = inet_addr("192.168.1.113");//伺服器IP地址25 //2.連結的伺服器26 if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)) == -1)27 {28 printf("connect error.\n");29 exit(1);30 }31 //3.發送資料到伺服器32 printf("Please input char:\n");33 fgets(buffer,128,stdin);34 send(sockfd,buffer,strlen(buffer),0);35 //4.關閉串連36 close(sockfd);37 38 return 0;39 }tcp_client.c
並發伺服器設計