《网络编程技术》实验指导书(6)

2019-03-27 16:16

printf(\ scanf(\

if((numbytes=send(fd,buf,strlen(buf),0))==-1) { perror(\

exit(1);

}

bzero(buf,100); while(i){

printf(\ scanf(\ if(strlen(buf)<1) i=0 ;

if((numbytes=send(fd,buf,strlen(buf),0))==-1) { perror(\

exit(1);

}

bzero(buf,100);

if((numbytes=recv(fd,buf,MAXDATASIZE,0))==-1) { perror(\

exit(1);

}

buf[numbytes]='\\0';

printf(\ printf(\ bzero(buf,100); } close(fd); }

26

(2)服务器端程序如下: #include #include #include #include #include #include #include #include #include #define PORT 1234 #define BACKLOG 2 #define MAXCHARSIZE 100

void process_client(int connectfd,struct sockaddr_in client); void *start_routine(void *arg); struct ARG{ int connfd;

struct sockaddr_in client; };

struct ARG *arg; int main(void) {

int listenfd,connectfd; struct sockaddr_in server,client; int sin_size;

int opt=SO_REUSEADDR; pthread_t tid;

sin_size=sizeof(struct sockaddr_in);

if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1) {

27

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);

} while(1) {

if((connectfd=accept(listenfd,(struct sockaddr *) &client,&sin_size))==-1) { perror(\ exit(-1);

}

arg=(struct ARG *)malloc(sizeof (struct ARG)); arg -> connfd = connectfd;

memcpy((void *)&arg -> client, &client, sizeof(client)); if(pthread_create(&tid, NULL, start_routine, (void *)arg)) {

28

perror(\ error.\\n\ exit(-1); } }

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(\ bzero(recvbuf,100);

while(recvlen=recv(connectfd,recvbuf,MAXCHARSIZE,0)){ recvbuf[recvlen]='\\0';

printf(\

29

for(i=0;i

send(connectfd,sendbuf,strlen(sendbuf),0);

bzero(recvbuf,100); } /*while*/

printf(\ close(connectfd); }

void *start_routine(void *arg) { struct ARG *info; info = (struct ARG *)arg;

process_client(info -> connfd, info -> client); free(arg);

pthread_exit(NULL); }

30


《网络编程技术》实验指导书(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:【温州2019届高三适应性测试】2018年8月温州市普通高中选考适应

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: