while(recvlen=recv(connectfd,recvbuf,MAXCHARSIZE,0)){ recvbuf[recvlen]='\\0';
printf(\ for(i=0;i send(connectfd,sendbuf,strlen(sendbuf),0); } close(connectfd); } 16 实验三 多进程服务器设计 1、 实验目的 1.掌握多进程服务器的知识。 2.掌握多进程程序的编写方法。 2、 实验要求 1.认真阅读和掌握本实验的相关知识点。 2.上机编写并运行程序。 3.保存和打印出程序的运行结果,并结合程序进行分析。 3、 实验内容 1、服务器等待客户连接,连接成功后向客户发送欢迎信息,接着接收该客户的名字并显示,然后接收来自客户的信息(字符串),将该字符串反转,并将结果送回客户。要求服务器具有同时处理多个客户的能力。 2、客户首先与服务器连接,接着接收用户输入客户的名字,将该名字发送给服务器,然后接收用户输入的字符串,并发送给服务器,然后接收服务器返回的经处理后的字符串,并显示之。当用户输入Ctrl+D,终止连接并退出。 4、实验内容程序 (1)客户端程序如下: #include #define MAXDATASIZE 1000 int main(int argc,char * argv[]) { int fd,numbytes; char buf[MAXDATASIZE]; struct hostent * he; 17 struct sockaddr_in server; int i=1; if(argc!=2) { printf(\ \\n\ exit(-1); } if((he=gethostbyname(argv[1]))==NULL){ perror(\ exit(-1); } if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){ perror(\ exit(1); } bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr=*((struct in_addr *)he->h_addr); if(connect(fd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1) { perror(\ exit(1); } if((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1) { perror(\ exit(1); } buf[numbytes]='\\0'; 18 printf(\ printf(\ scanf(\ if((numbytes=send(fd,buf,strlen(buf),0))==-1) { perror(\ exit(1); } while(i){ printf(\ scanf(\ if(strlen(buf)<1) i=0 ; if((numbytes=send(fd,buf,strlen(buf),0))==-1) { perror(\ exit(1); } if((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1) { perror(\ exit(1); } buf[numbytes]='\\0'; printf(\ printf(\ } close(fd); } (2)服务器端程序如下: #include 19 #include void process_client(int connectfd,struct sockaddr_in client); int main(void) { int listenfd,connectfd; struct sockaddr_in server,client; int sin_size; int opt=SO_REUSEADDR; pid_t pid; if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror(\ exit(-1); } setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(listenfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1) { perror(\ 20