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';
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);
11
}
if((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1) { perror(\
exit(1);
}
buf[numbytes]='\\0';
printf(\ printf(\ } close(fd); }
服务器端程序如下: #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;
12
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(\
exit(-1);
}
if(listen(listenfd,BACKLOG)==-1) { perror(\
exit(-1);
}
sin_size=sizeof(struct sockaddr_in); while(1){
if((connectfd=accept(listenfd,(struct sockaddr *) &client,&sin_size))==-1){ perror(\ exit(-1);
}
if((pid=fork())>0){ close(connectfd) ; continue; }
else if(pid==0){
13
close(listenfd);
process_client(connectfd,client); exit(1); } else {
perror(\ error.\\n\
exit(0);
} }
close(listenfd); }
void process_client(int connectfd,struct sockaddr_in client){ char recvbuf[MAXCHARSIZE]; char sendbuf[MAXCHARSIZE]; char client_name[MAXCHARSIZE]; int recvlen,i;
printf(\ send(connectfd,\ recvlen=recv(connectfd,client_name,MAXCHARSIZE,0); if(recvlen==0){ close(connectfd);
printf(\ return; }
else if(recvlen<0){
close(connectfd);
printf(\ return; }
client_name[recvlen]='\\0';
printf(\
14
while(recvlen=recv(connectfd,recvbuf,MAXCHARSIZE,0)){ recvbuf[recvlen]='\\0';
printf(\ message:%s\\n\ for(i=0;i send(connectfd,sendbuf,strlen(sendbuf),0); } /*while*/ printf(\ close(connectfd); } 15