安徽理工大学2017网络编程试卷及卷参考答案

上传人:靓*** 文档编号:42758569 上传时间:2021-11-27 格式:DOCX 页数:20 大小:110.54KB
返回 下载 相关 举报
安徽理工大学2017网络编程试卷及卷参考答案_第1页
第1页 / 共20页
安徽理工大学2017网络编程试卷及卷参考答案_第2页
第2页 / 共20页
安徽理工大学2017网络编程试卷及卷参考答案_第3页
第3页 / 共20页
点击查看更多>>
资源描述
20 16 20 17 学年 第 2学期试 卷一、名词解释(写出要点即可)( 3*5=15分)1、套接口2、主机字节序3、地址族4、网络掩码:5、管道二、简答( 5*7=35 分)名姓1、简述套接口与已打开的文件之间的差异。2、 socket 中的缓冲有哪几种基本模式?3、常用的套接口类型有哪几种?4、 SOCK_DGRAM套接口具有哪些特征?:线5、简述 close 和 shutdown 在关闭套接口时的不同。6、简述传统的本地地址和抽象的本地地址之间的区别?号学7、简述在 SOCK_STREAM 和 SOCK_DGRAM 套接口调用 connect 函数的异同。三、程序阅读及填空(20分 )订1、下面的程序为基于UDP的服务器端,该服务器用户接收从客户端输入的服务名或端口号,查询 /etc/services文件,然后将查询结果,返回给客户端,设编:译后,命令名为 getserv,完成其空白部分。级int main(int argc, char *argv)班struct sockaddr_in addr_inet,addr_clnt;业装专int z,len_inet,s,res;char recbuf512,dtfmt512;/接收缓冲区和发送缓冲区4char *caddr=NULL,*cport=NULL;/服务器地址和端口1-41if (argc=2)/命令行格式为: getserv SrvIP:SrvPort机;算计 ;写填else/ 缺省地址人caddr=127.0.0.23;: 卷级出cport=9090;由班项业该专课程名称:网络编程考试形式: 闭卷试卷:A/* 创建套接口 */;if (s=-1)bail(socket();/* 建立地址 */memset(&addr_inet,0,sizeof addr_inet);addr_inet.sin_family=AF_INET; /短整型主机字节序转换成网络字节序;/ 处理网络地址if (addr_inet.sin_addr.s_addr=INADDR_NONE)bail(bad address.);len_inet=sizeof addr_inet;/* 服务器端绑定地址*/;if (z=-1)bail(bind();/* 等待客户端请求*/for (; ; )/* 服务器端一直阻塞,指导在指定的套接口上接收到数据报*/len_inet=sizeof addr_clnt;if (z0)bail(recvfrom(2);/* 客户端请求处理*/recbufz=0;if (!strcasecmp(recbuf,QUIT) break;/* 客户端请求处理*/第 (1) 页 共 (14) 页:名姓:号学:级班业专写填人: 卷级 出班 由业 项专 该20 1620 17 学年第 2学期试 卷memset(dtfmt,0,sizeof dtfmt);res=lookfor(dtfmt,recbuf);/获得处理结果if (!res) sprintf(dtfmt,error!);/* 返回格式化结构,并发送到客户端*/;if (z0)pid=waitpid(-1,&stat,WNOHANG);/ signal(SIGCHLD,sig_handler);装return;int main(int argc, char *argv)int clt_addr_len,listen_fd,com_fd,ret,i,len,port;char recv_bufMAX_BUF,snd_bufMAX_BUF;pid_t pid;struct sockaddr_in clt_addr,srv_addr;int z, reuseaddr,opt_len,srcfd,dst_file;if (argc!=2)课程名称:网络编程考试形式: 闭卷试卷:Cprintf(Usage: %s portn,argv0);return 1;/ 获得输入的端口号port=atoi(argv1);if (signal(SIGCHLD,sig_handler)0) / return 1;/ reuseaddr=TRUE;opt_len=sizeof reuseaddr;z=setsockopt(s,SOL_SOCKET,SO_REUSEADDR, &reuseaddr,opt_len);if (z)bail(setsockopt(SO_REUSEADDR);listen_fd=socket(PF_INET,SOCK_STREAM,0);if (listen_fd0)return 1;/ memset(&srv_addr,0,sizeof srv_addr);srv_addr.sin_family=AF_INET;srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);srv_addr.sin_port=htons(port);/ ret=bind(listen_fd,(struct sockaddr*)&srv_addr, sizeof srv_addr);if (ret=-1)close(listen_fd);return 1;第 (2) 页 共 (14) 页20 16 20 17 学年第 2学期试 卷 课程名称:网络编程考试形式: 闭卷试卷: C/ 四、编程 (15*2=30 分 )ret=listen(listen_fd,5);1、 编程实现从给定的IP 地址中取出网络标识, 并以点分十进制输出IP 地址和if (ret=-1)return 1;网络标识。:2、 设计一段程序,作为服务器端,本机地址192.193.194.195 ,端口2000,监名while (TRUE)听队列长 5,采用字节流模式, INET地址模式 ;实现服务器功能。姓len=sizeof clt_addr;:号学:级班业专写填人: 卷级 出班 由业 项专 该com_fd=accept(listen_fd,(struct sockaddr *)&clt_addr,&len);if (com_fd0)if (errno=EINTR)/ continue;else线close(listen_fd);return 1;订pid=fork();if (pid0)/ close(listen_fd);装return 1;else if (pid=0)/srcfd=rdfname(com_fd,(void *)recv_buf,MAX_BUF);/处理文件名z=trnsfile(srcfd,com_fd,(void *)recv_buf,MAX_BUF);/传输文件close(com_fd);exit(0);else/ close(com_fd);return 0;第 (3) 页 共 (14) 页20 16 20 17五、名词解释(写出要点即可) ( 3*5=15分)1、套接口2、主机字节序3、地址族4、网络掩码:5、管道六、简答( 5*7=35 分)名姓1、简述套接口与已打开的文件之间的差异。2、 socket 中的缓冲有哪几种基本模式?3、常用的套接口类型有哪几种?4、 SOCK_DGRAM 套接口具有哪些特征?:线5、简述 close 和 shutdown 在关闭套接口时的不同。6、简述传统的本地地址和抽象的本地地址之间的区别?号学7、简述在 SOCK_STREAM和 SOCK_DGRAM 套接口调用七、分析程序(20 分 )订1、extern int h_errno; /int main(int argc,char *argv) /:int x ,x2;级struct hostent *hp;/班for(x=1;xh_name);/人fputs( Aliases:t ,stdout); /: 卷级出for(x2=0;hp-h_aliasesx2;+x2)/班 由业项 if(x2)该专学年第 2学期试 卷 课程名称:网络编程考试形式: 闭卷试卷:Cfputs(,stdout);fputs(hp-h_aliasesx2,stdout);fputc(n,stdout);printf(Type:tt%sn,hp-h_addrtype=AF_INET?AF_INET:AF_INET6);if(hp-h_addrtype=AF_INET)for(x2=0;hp-h_addr_listx2;+x2)printf( Address:t%sn,inet_ntoa(*(struct in_addr *)hp-h_addr_listx2);putchar(n);connect 函数的异同。return 0;2、int main(int argc,char *argv)int z;char *srvr_addr=NULL;struct sockaddr_in adr_inet;/struct sockaddr_in adr_clnt;int len_inet;int s;char dgram512;char dtfmt512;time_t td;struct tm tm;if(argc=2)/srvr_addr=argv1;elsesrvr_addr=127.0.0.13;s=socket(PF_INET,SOCK_DGRAM,0);第 (4) 页 共 (14) 页20 16 20 17学年第 2学期试 卷 课程名称:网络编程考试形式: 闭卷试卷: Cif(s=-1)八、编程 (15*2=30 分 )printf(socket();1、 编程实现从给定的IP 地址中取出网络标识, 并以点分十进制输出 IP 地址和memset(&adr_inet,0,sizeof adr_inet); /网络标识。adr_inet.sin_family=AF_INET; /2、 设计一段程序,作为服务器端,本机地址192.193.194.195,端口 2000 ,监:adr_inet.sin_port=htons(9000);/听队列长 5,采用字节流模式, INET 地址模式 ;实现服务器功能。adr_inet.sin_addr.s_addr=inet_addr(srvr_addr); /名姓if(adr_inet.sin_addr.s_addr=INADDR_NONE) /printf(bad address.);len_inet=sizeof adr_inet;z=bind(s,(struct sockaddr *)&adr_inet,len_inet);if(z=-1)线printf(bind();:for(;)号len_inet=sizeof adr_clnt;学z=recvfrom(s,dgram,sizeof dgram,0,(struct sockaddr订*)&adr_clnt,&len_inet); /if(z0)printf(recvfrom(2);dgramz=0;:装if(!strcasecmp(dgram,QUIT)/级break;班业time(&td);专41-41机 算 写计 填人: 卷级 出班 由业 项专 该tm=*localtime(&td);strftime(dtfmt,sizeof dtfmt,dgram,&tm);z=sendto(s,dtfmt,strlen(dtfmt),0,(struct sockaddr*)&adr_clnt,len_inet);/if(z0)printf(sendto(2);close(s);return 0;第 (5) 页共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C20162017学年第二学期网络编程A 卷参考答案一 名词解释(写出要点即可)(3*5=15 分 )1.套接口:套接口是一个为了用户应用进程可以方便进行通信的接口系统。在该系统中最大限度的使用了已有的系统调用,同时也添加新的系统调用来支持TCP/IP 功能。套接口代表通信线路中的端点。2.主机字节序: CPU 使用的字节序,根据不同的实现,操作系统根据自身的设计可以选择使用大端字节序或小端字节序。3.地址族:用于指明在套接口中使用哪一种地址类型,通常在实现中,一种套接口协议只使用一种种类的地址,故地址族也可以直接对应协议族,且可以在调用中混用。但在地址初始化时,不能使用地址族代替协议族,反之亦然。4.网络掩码:作用在于把网路地址从IP 地址中提取出来,即网络掩码与IP 地址进行按位与,可以获得网络号。5.管道:是连接一个程序的输出和另一个程序的输入的单向通信通道。二 简答( 5*7=35 分)1. 简述套接口与已打开的文件之间的差异。答:不能在套接口上调用lseek,但在已打开的文件上可以调用lseek 以指定文件指针的位置;套接口可以和网络地址绑定,而文件和管道不能;套接口具有很多能通过ioctl 进行查询和设置的选项;套接口必须在正确的状态下才能实现输入和输出,而已打开的文件在任何时候都可以进行读或写操作。2. socket 中的缓冲有哪几种基本模式?答: socket 缓冲区有三种基本类型:无缓冲,线性缓冲和块缓冲。通常套接口交互式文本行方式时,宜采用线性缓冲,此时无需用户显式调用 fflush 函数回写套接口;而块缓冲,也叫全缓冲,在进行套接口写操作时,需要显式调用fflush 函数回写套接口。3. 常用套接口类型有哪几种?答:套接口常有以下类型: SOCK_STREAM 表示使用 TCP 协议,进行数据流通信, SOCK_DGRAM 表示使用 UDP 协议,SOCK_SEQPACKET表示使用 X.25 协议, SOCK_RAW 表示使用原始的套接口。4. SOCK_DGRAM套接口具有哪些特征?答: SOCK_DGRAM 为 UDP 数据报套接口,其具有如下特征:实现简单、高效、快速,不需要建立连接,故无需连接的建立和拆除,避免了在网络中大量传递用于维护通信的消息分组,从而节省了消息传递的时间;通信更富有弹性,可以为每次消息的发送指定不同的接受者;具有广播能力; UDP 协议本身不对消息的有效性进行验证,因此是通信过程是不可靠的;多数据报的无序性;消息尺寸是有限制的。5.简述 close 和 shutdown 在关闭套接口时的不同。答: shutdown 调用不关心套接口上关联的文件描述符的个数,只是立即关闭套接口,因此shutdown 调用将影响该套接口上关联的所有文件描述符,也直接影响所有连接到该套接口上的流;close 调用只是将当前套接口上关联的文件描述符个数减一,只当某套接口在调用close后,其关联的文件描述符个数刚好为0,才真正关闭。6.传统的本地地址和抽象的本地地址之间的区别是什么?第 (6) 页共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C答:在使用传统的本地套接口地址时,系统会生成一个本地文件对象。而使用抽象地址时不会有这样的文件对象生成。在使用是抽象地址在定义是需要在字符地址前留出一个占位符。7.简述在 SOCK_STREAM和 SOCK_DGRAM套接口调用connect 函数的异同。答:在 SOCK_STREAM套接口程序的客户端调用connect 函数时,客户端将请求服务器端建立一个固定的连接,此后所有通信的消息都是在该连接上发送和接收的;而SOCK_DGRAM套接口调用connect 函数时,并不是希望与服务器端建立连接,只是表明在过后的一段时间内,服务器和客户端的通信将基于当前connect 调用时的IP 地址,且套接口可以随时取消connect 调用。三 程序阅读及填空1. (每空 1 分,共 10 分) caddr=strtok(argv1,:); cport=strtok(NULL,0); s=socket(AF_INET,SOCK_DGRAM,0); addr_inet.sin_port=htons(atoi(cport); addr_inet.sin_addr.s_addr=inet_addr(caddr); z=bind(s,(struct sockaddr *)&addr_inet,len_inet); z=recvfrom(s,recbuf,sizeof recbuf,0,(struct sockaddr *)&addr_clnt,&len_inet); z=sendto(s,dtfmt,strlen(dtfmt),0,(struct sockaddr *)&addr_clnt,len_inet); close(s);2.(每空 1 分,共10 分)调用 waitpid等待子进程结束,返回结束的子进程的进程号设置信号处理函数,当子进程结束时,有sig_handler 函数处理设置套接口选项,激活地址复用套接口地址初始化调用 bind 函数,绑定套接口地址监听指定端口,将内核的监听队列长度设置为5当 accept 调用因捕获中断而终止时,重新响应连接请求调用 fork 函数克隆子进程处理客户端请求,若调用失败关闭监听套接口,返回1子进程处理客户端请求父进程处理。四 编程题1. ( 15 分)第 (7) 页共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C/头文件略int main(int argc,char *argv)int x ;struct sockaddr_in adr_inet;const char *addr=192.193.194.195;unsigned long net;memset(&adr_inet,0,sizeof adr_inet);adr_inet.sin_family=AF_INET;adr_inet.sin_port=htons(2000);if(!inet_aton(addr,&adr_inet.sin_addr)puts(bad address);net=inet_netof(adr_inet.sin_addr);printf(%14s: ,inet_ntoa(adr_inet.sin_addr);memset(&adr_inet,0,sizeof adr_inet);adr_inet.sin_family=AF_INET;adr_inet.sin_port=htons(9000);adr_inet.sin_addr=inet_makeaddr(net,0);printf(%14s: ,inet_ntoa(adr_inet.sin_addr);return 0;2.( 15 分)/头文件略int main(int argc,char* argv)int server_sockfd,client_sockfd;int server_len,client_len;char readbuf80;char writebuf80;char tmp64;struct sockaddr_in server_address;struct sockaddr_in client_address;第 (8) 页共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:Cserver_sockfd = socket(AF_INET,SOCK_STREAM,0);memset(&server_address,0,sizeof(server_address);server_address.sun_family = AF_INETadr_inet.sin_port=htons(2000);adr_inet.sin_addr.s_addr=inet_addr(“ 192.193.194.195” );if(adr_inet.sin_addr.s_addr=INADDR_NONE)printf(bad address.);len_inet=sizeof adr_inet;z=bind(s,(struct sockaddr *)&adr_inet,len_inet);listen(server_sockfd,5);w hile(1)memset(&readbuf,0,sizeof(readbuf);memset(&writebuf,0,sizeof(writebuf);printf(server waiting.n);client_sockfd = accept(server_sockfd,(struct sockaddr*)&client_address,&client_len);read(client_sockfd,&readbuf,sizeof(readbuf);printf(Client input char %s.n,readbuf);strcpy(&writebuf,Receive OK!);write(client_sockfd,&writebuf,sizeof(writebuf);close(client_sockfd);第 (9) 页共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C2016-2017(第 2 学期)网络编程试卷C 参考答案一、名词解释(3*5=15 分)1、套接口:套接口是一个为了用户应用进程可以方便进行通信的接口系统。在该系统中最大限度的使用了已有的系统调用,同时也添加新的系统调用来支持 TCP/IP 功能。套接口代表通信线路中的端点。2、网络字节序:是大端字节序,即一种将高序字节存储在起始位置的方法。3、地址族:用于指明在套接口中使用哪一种地址类型。4、网络掩码:作用在于把网路地址从IP 地址中提取出来,即网络掩码与IP 地址进行按位与,可以获得网络号。5、管道:是连接一个程序的输出和另一个程序的输入的单向通道。二、简答( 5*7=35 分)1、简述套接口与已打开的文件之间的差异。答:不能在套接口上调用lseek ,但在已打开的文件上可以调用lseek 以指定文件指针的位置;套接口可以和网络地址绑定,而文件和管道不能;套接口具有很多能通过 ioctl 进行查询和设置的选项;套接口必须在正确的状态下才能实现输入和输出,而已打开的文件在任何时候都可以进行读或写操作。2、 socket 中的缓冲有哪几种基本模式?答: socket缓冲区有三种基本类型:无缓冲,线性缓冲和块缓冲。通常套接口交互式文本行方式时,宜采用线性缓冲,此时无需用户显式调用 fflush函数回写套接口;而块缓冲,也叫全缓冲,在进行套接口写操作时,需要显式调用fflush函数回写套接口。3、 socket 有哪几种常用类型,各是什么?答:套接口常有以下类型: SOCK_STREAM表示使用 TCP协议,进行数据流通信, SOCK_DGRAM表示使用 UDP协议, SOCK_SEQPACKET表示使用 X.25 协议, SOCK_RAW表示使用原始的套接口。4、 SOCK_DGRAM套接口具有哪些特征?答: SOCK_DGRAM为 UDP数据报套接口,其具有如下特征:实现简单、高效、快速,不需要建立连接,故无需连接的建立和拆除,避免了在网络中大量传递用于维护通信的消息分组,从而节省了消息传递的时间;通信更富有弹性,可以为每次消息的发送指定不同的接受者;具有广播能力; UDP协议本身不对消息的有效性进行验证, 因此是通信过程是不可靠的; 多数据报的无序性; 消息尺寸是有限制的。5. 简述 close 和 shutdown 在关闭套接口时的不同。5、简述 close和 shutdown 在关闭套接口时的不同?答: shutdown 调用不关心套接口上关联的文件描述符的个数,只是立即关闭套接口,因此 shutdown 调用将影响该套接口上关联的所有文件描述符,也直接影响所有连接到该套接口上的流;close 调用只是将当前套接口上关联的文件描述符个数减一,只当某套接口在调用close后,其关联的文件描述符个数刚好为0,才真正关闭。6、传统的本地地址和抽象的本地地址之间的区别是什么?第 (10) 页 共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C答:在使用传统的本地套接口地址时,系统会生成一个本地文件对象。而使用抽象地址时不会有这样的文件对象生成。在使用是抽象地址在定义是需要在字符地址前留出一个占位符。7、简述在 SOCK_STREAM和 SOCK_DGRAM套接口调用 connect 函数的异同。答:在 SOCK_STREAM套接口程序的客户端调用connect 函数时,客户端将请求服务器端建立一个固定的连接,此后所有通信的消息都是在该连接上发送和接收的;而SOCK_DGRAM套接口调用 connect 函数时,并不是希望与服务器端建立连接,只是表明在过后的一段时间内,服务器和客户端的通信将基于当前connect 调用时的 IP 地址,且套接口可以随时取消connect 调用。三、分析程序 (20分 )1、说明错误号变量h_errno是一个外部变量该函数演示了如何使用 DNS服务来通过主机名获得IP 地址定义一个 hostent 结构指针变量 hp 用于接收函数gethostbyname 的返回根据命令行参数的个数来决定循环的次数通过命令行的主机名参数来获得IP 地址如果函数 gethostbyname调用失败,继续循环的下一轮。打印命令行参数中的主机名打印 gethostname 调用返回的主机名输出字符串“Aliases :”以一个制表位结尾打印出该主机的所有别名2、定义服务器端的套接口地址结构命令行参数2 用于接收用户输入的服务器地址清空套接口地址结构的所有字节设置套接口的地址族设置该套接口使用的端口号将字符IP 地址转换成网络字节序的二进制地址测试 inet_addr调用是否失败接收 UPD客户端的通信请求如果客户端输入“QUIT” , 服务器退出发送服务器端对客户端请求的处理结果给客户端四、编程 (15*2=30 分 )第 (11) 页 共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C1、编程实现从给定的IP 地址中取出网络标识,并以点分十进制输出IP 地址和网络标识。#include #include #include #include #include #include #include int main(int argc,char *argv)int x;struct sockaddr_in adr_inet;const char *addr=44.135.86.12;unsigned long net;memset(&adr_inet,0,sizeof adr_inet);adr_inet.sin_family=AF_INET;adr_inet.sin_port=htons(9000);if(!inet_aton(addr,&adr_inet.sin_addr)puts(bad address);net=inet_netof(adr_inet.sin_addr);printf(%14s: ,inet_ntoa(adr_inet.sin_addr);memset(&adr_inet,0,sizeof adr_inet);adr_inet.sin_family=AF_INET;adr_inet.sin_port=htons(9000);adr_inet.sin_addr=inet_makeaddr(net,0);printf(%14s: ,inet_ntoa(adr_inet.sin_addr);return 0;2、设计一段程序,作为服务器端,本机地址192.193.194.195,端口 2000,监听队列长5,采用字节流模式,INET 地址模式;实现服务器功能。#include mysocket.h#include sys/un.h第 (12) 页 共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:Cint main(int argc,char* argv)int server_sockfd,client_sockfd;int server_len,client_len;char readbuf80;char writebuf80;char tmp64;struct sockaddr_in server_address;struct sockaddr_in client_address;server_sockfd = socket(AF_INET,SOCK_STREAM,0);memset(&server_address,0,sizeof(server_address);server_address.sun_family = AF_INET;adr_inet.sin_port=htons(2000);/adr_inet.sin_addr.s_addr=inet_addr(“ 192.193.194.195” );/if(adr_inet.sin_addr.s_addr=INADDR_NONE)/printf(bad address.);len_inet=sizeof adr_inet;z=bind(s,(struct sockaddr *)&adr_inet,len_inet);/listen(server_sockfd,5);while(1)memset(&readbuf,0,sizeof(readbuf);memset(&writebuf,0,sizeof(writebuf);printf(server waiting.n);client_sockfd = accept(server_sockfd,(struct sockaddr*)&client_address,&client_len);read(client_sockfd,&readbuf,sizeof(readbuf);printf(Client input char %s.n,readbuf);strcpy(&writebuf,Receive OK!);write(client_sockfd,&writebuf,sizeof(writebuf);close(client_sockfd);第 (13) 页 共 (14) 页20 1620 17 学年第 2学期试 卷课程名称:网络编程考试形式: 闭卷试卷:C第 (14) 页 共 (14) 页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械制造 > 工业自动化


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!