电子科技大学网络编程作业(IO复用)4_第1页
电子科技大学网络编程作业(IO复用)4_第2页
电子科技大学网络编程作业(IO复用)4_第3页
电子科技大学网络编程作业(IO复用)4_第4页
电子科技大学网络编程作业(IO复用)4_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子科技大学网络编程作业(IO复用)4.网络编程作业4作业要求:服务器利用I/O复用技术,实现同时向多个客户供给服务。要求:服务器:接收客户连接央求,并打印客户IP地址及端口号,尔后接收客户发来的字符串,并打印该字符串和其来自与哪个客户。同时向客户返回该字符串。当某一客户断开连接时,要求服务器打印该客户输入的全部字符。客户:从命令行接收伏务器地址,并向服务器倡议连接央求,连接成功后,从标准输入接收字符串并发送给服务器,等待服务器响应并打印接收的信息。程序:服务器端:#include#include#include#include#include#include#include#include#

2、include专业.专注.电子科技大学网络编程作业(IO复用)4.#definePORT9999#defineBACKLOG5#defineMAXDATASIZE1000typedefstructCLIENTintfd;char*name;structsockaddr_inaddr;char*data;CLIENT;voidprocess_cli(structCLIENT*client,char*recvbuf,intlen);voidsavedata(char*recvbuf,intlen,char*data);intmain(void)inti,maxi,maxfd,sockfd;intn

3、ready;ssize_tn;fd_setrset,allset;intlistenfd,connectfd;structsockaddr_inserver;structCLIENTclientFD_SETSIZE;charrecvbufMAXDATASIZE;intsin_size;专业.专注.电子科技大学网络编程作业(IO复用)4.if(listenfd=socket(AF_INET,SOCK_STREAM,0)=-1)perror(Createsocketfailed.);exit(-1);intopt=SO_REUSEADDR;setsockopt(listenfd,SOL_SOCKE

4、T,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,(structsockaddr*)&server,sizeof(structsockaddr)=-1)perror(Binderror.);exit(-1);if(listen(listenfd,BACKLOG)=-1)perror(listenerro

5、r.);专业.专注.电子科技大学网络编程作业(IO复用)4.exit(-1);sin_size=sizeof(structsockaddr_in);maxfd=listenfd;maxi=-1;for(i=0;iFD_SETSIZE;i+)clienti.fd=-1;FD_ZERO(&allset);FD_SET(listenfd,&allset);while(1)structsockaddr_inaddr;rset=allset;nready=select(maxfd+1,&rset,NULL,NULL,NULL);if(FD_ISSET(listenfd,&rset)if(connectf

6、d=accept(listenfd,(structsockaddr*)&addr,&sin_size)=-1)perror(accepterror.);continue;for(i=0;iFD_SETSIZE;i+)if(clienti.fdmaxfd)maxfd=connectfd;if(imaxi)maxi=i;专业.专注.电子科技大学网络编程作业(IO复用)4.if(-nready=0)continue;for(i=0;i=maxi;i+)if(sockfd=clienti.fd)0)continue;if(FD_ISSET(sockfd,&rset)if(n=recv(sockfd,r

7、ecvbuf,MAXDATASIZE,0)=0)close(sockfd);printf(Client(%s)closedconnection.Userdata:%sn,,clienti.data);FD_CLR(sockfd,&allset);clienti.fd=-1;free();free(clienti.data);elseprocess_cli(&clienti,recvbuf,n);if(-nreadyname)=0)memcpy(client-name,recvbuf,len);printf(Clientsnameis%s.n,cl

8、ient-name);return;printf(Receivedclient(%s)message:%sn,client-name,recvbuf);savedata(recvbuf,len,client-data);for(i1=0;i1fd,sendbuf,strlen(sendbuf),0);voidsavedata(char*recvbuf,intlen,char*data)专业.专注.电子科技大学网络编程作业(IO复用)4.intstart=strlen(data);inti;for(i=0;ilen;i+)datastart+i=recvbufi;客户端:#include#inc

9、lude#include#include#include#include#include#definePORT9999#defineMAXDATASIZE100intmain(intargc,char*argv)intfd,numbytes;charbufMAXDATASIZE;structhostent*he;专业.专注.电子科技大学网络编程作业(IO复用)4.structsockaddr_inserver;inti=1;if(argc!=2)printf(Usage:%sn,argv0);exit(-1);if(he=gethostbyname(argv1)=NULL)perror(get

10、hostbynameerror.);exit(-1);if(fd=socket(AF_INET,SOCK_STREAM,0)=-1)perror(Createsocketfailed.);exit(1);bzero(&server,sizeof(server);server.sin_family=AF_INET;专业.专注.电子科技大学网络编程作业(IO复用)4.server.sin_port=htons(PORT);server.sin_addr=*(structin_addr*)he-h_addr);if(i=connect(fd,(structsockaddr*)&server,size

11、of(structsockaddr)=-1)perror(connectfailed.);exit(1);if(numbytes=recv(fd,buf,MAXDATASIZE,0)=-1)perror(recverror.);exit(1);bufnumbytes=0;printf(ServerMessage:%s,buf);printf(Pleaseinputyourname:);scanf(%s,buf);if(numbytes=send(fd,buf,strlen(buf),0)=-1)perror(senderror.);专业.专注.电子科技大学网络编程作业(IO复用)4.exit(1);while(1)printf(Pleaseinputmessage(maxchar:%d):,MAXDATASIZE);scanf(%s,buf);if(strlen(buf)1)i=0;if(numbytes=send(fd,buf,strlen(buf),0)=-1)perror(senderror

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论