07-08网络程序设计A卷答案

2019-08-03 13:19

07—08学年第一学期《网络程序设计》课程期末考试试卷(A卷答案)

一 、单选题(本题共40分,每小题 2 分)

1.下列( C )不属于计算机网络硬件的组成部分。 A)服务器 B)网卡 C)网络操作系统 D)通信介质 2.接口是指( A )之间交互的界面

A)同一系统相邻层 B)不同系统同一层次 C)不同系统相邻层 D)对等实体 3.TCP/IP协议蔟共有( A )层。 A)4 B)5 C)6 D)7 4.在TCP/IP协议簇中,( B )组属于应用层协议

A) IP、TCP和UDP B) FTP、SMTP和TELNET C) ARP、IP和UDP D) ICMP、ARP和RARP 5.以下IP地址( B )是广播地址.

A)126.1.255.255 B)126.255.255.255 C)126.1.12.255 D)126.0.0.0 6.网间进程通信与( D )无关

A)协议 B)地址 C)端口 D)进程号

7.关于UDP协议,以下说法不正确的是( A )

A)UDP是面向无连接的互连层协议,它是无序,不可靠的协议。 B)使用UDP通信不需要建立连接也不需要释放连接。 C)UDP适合于短信息服务。 D)自身不提供流量控制机制。

8.在main()中若连续执行i=fork();j=fork();k=fork();后,由此引发( C )个进程同时存在。

A)4 B)6 C)8 D)9

9. 同一进程中的线程不能共享( D )

A)全局变量 B)打开的文件描述符 C)当前工作目录 D)errno变量 10.将域名转换为十进制点分格式的IP地址应使用( A ) A)gethostbyname() B)gethostbyaddr() C)getservbyname() D)gethostname() 11.下列( B )信号是不能忽略的。

A)SIGINT B)SIGSTOP C)SIGQUIT D)SIGCHLD 12.下列说法( C )是不正确的

A)父进程应调用wait()或waitpid()释放其已终止的子进程的资源,否则终止的子进程为僵死进程

B)管道是单工通信

C)FIFO只能在父子进程间通信 D)消息队列的访问本身具有锁机制

13.在vi编辑器使用中,末行命令s/print/printf/g的功能是( C ) A)将当前行所有字符串print改为printf B)将当前行第一个字符串print改为printf C)将所有行所有字符串print改为printf D)将所有行第一个字符串print改为printf

14.在TCP通信中,客户端用connect进行连接请求,正确的是( A ) A)z_size= sizeof(sockaddr_in);

connect(fd,(sockaddr *)(&server),z_size); B)z_size= sizeof(sockaddr_in);

connect(fd,( sockaddr *)(&server),&z_size); C)z_size= sizeof(sockaddr_in);

connect(fd,( sockaddr *)(server),z_size); D)z_size= sizeof(sockaddr_in);

connect(fd,( sockaddr *)(server),&z_size); 15.close()和shutdown()都可以用于关闭socket描述符,其中close()的功能是( C ) A)可以只关闭接收端 B)可以只关闭发送端 C)同时关闭 D)以上三种都可以

16.按IPV4网络掩码规则, 如没有进一步子网划分,IP地址为191.10.56.18主机的网络掩码是( B )

A)255.0.0.0 B)255.255.0.0

C)255.255.255.0 D)非法IP地址,无法确定网络掩码 17.以下关于带外数据的说法错误的是( C )

A)带外数据是通信过程中优先得到服务的数据。 B)带外数据只有一个字节。

C)read()是不能接收带外数据的。

D)通过带外数据实现心跳信号的发送和接收,判断客户端是否与服务器失去联系。 18.I/O多路复用中,建立需要监视的套接字描述符confd与描述符集合fdset的联系,使用( A )

A)FD_SET(confd,&fdset);

B)select(maxfd+1,&fdset,NULL,NULL,NULL); C)FD_ISSET(confd,&fdset); D)FD_CLR(confd,&fdset );

19.下列语句中,若struct sockaddr_in adr_inet;( C )能正确将点分十进制格式的IP地址转换为地址结构变量中所需要的地址信息。

A) inet_aton(“202.113.16.10”,&adr_inet.sin_addr.s_addr); B) adr_inet.sin_addr=inet_aton(“202.113.16.10”);

C) adr_inet.sin_addr.s_addr=inet_addr(“202.113.16.10”); D) adr_inet.sin_addr=inet_addr(“202.113.16.10”); 20.系统调用 alarm(5); 的功能是( A )

A)设置定时信号的时间 B)捕获定时信号并作出响应处理 C)通知父进程,子进程已终止 D)生成系统时间戳 二、填空题(本题共20 分,每小题 2 分)

1.在网络中,某ISP拥有一批IP地址,但用户需求的IP数量已超过此个数,此时可以采用当用户有连接请求时分配IP的方式(每次分配的IP可能不同),断开连接立即回收此IP,这种分配IP的方式称为( 动态IP地址分配 )。

2.如果发现所编辑的程序第80行有错误,先使vi编辑器进入命令模式,再打入( 80G )可将光标立即移动到第80行。 3.若当前目录有C++源程序my.h, abc.cpp、f1.cpp和f2.cpp,其中abc.cpp中含有main(),且含有线程的相关操作,请用一条命令对它们编译、连接并生成可执行文件abc.exe,应使用( g++ abc.cpp f1.cpp f2.cpp -lpthread –o abc.exe ). 4. SOCK_STREAM套接字是基于( TCP )协议的。 5. 若定义:

pthread_t th1; struct student {int num;

struct sockaddr_in addr; }STU;

用( pthread_create(&th1,fun,(void *)&STU); )命令可以产生新线程,使新线程执行子函数fun(),其中fun()的原型为void *fun(void *ac),ac为形参,而 STU为调用fun()

时的实参。

6.互斥锁是提供( 线程同步 )的一种机制,用于保护线程代码中共享数据的完整性。 7.使用ls –l aaa命令,显示结果的第一列内容为prw-r----- ,说明aaa是( 管道 )类型的文件。

8. msgctl(msgid,IPC_RMID,0);的功能是( 删除消息队列msgid )。

9.带外数据的发送和接收,可直接使用send()、recv()等系统调用中的参数指定,用命令(send(sockfd,”A”,1,MSG_OOB); )可向套接字描述符sockfd发送带外数据’A’。 10.若struct sockaddr_in server_addr;初始化一个通配IP地址时(自动获得本机IP地址),应使用

(server_addr.sin_addr.s_addr=ntohl(INADDR_ANY); )。 三、判断(本题共20 分,每小题 2 分) 1.( 对 )IPV4地址占4个字节,网卡地址占6个字节 2.( 错 )不同协议(如TCP、UDP)也不能使用相同的端口号。 3.( 对 )在单一主机上进程间的通信(IPC)也可以使用socket技术实现。

4.( 对 )在UDP通信Client/Server模式中,必须客户端先发送数据,而在TCP通信Client/Server模式中,建立连接后,不要求客户端必须先发送数据。 5.( 错 )在进程通信过程中,有名管道只能用于具有共同祖先进程间的通信。 6.( 对 )使用kill()可以向某一进程组发送信号。 7.( 错 )用删除文件的方法可以删除消息队列。 8.( 错 )出错信息函数strerror()基于errno当前值在标准错误上打印一条出错信息。 9.( 错 )accept()系统调用既可以用于服务器端也可以用于客户端。 10.( 对 )vi中使用rx将光标处字符替换为x 。 四、应用题(本题共20 分,每小题5 分)

1.写出多进程并发服务器循环接收多个连接的典型代码

假设连接套接字为confd,侦听套接字为lisfd, 客户地址变量定义为sockaddr_in cli;处理客户数据的子程序原型为:void fun(int fd,sockaddr_in client))(要求写出如何接收不同客户连接请求,创建子进程,父子进程代码等) 答:

pid_t pid;

int len=sizeof(cli); while(1) {

confd=accept(lisfd,(sock_addr *)(&cli),&len); if((pid=fork())>0) {close(confd); continue; }

else if(pid==0) {close(lisfd); fun(confd,cli); } else

{ cout<<”fork error!\\n”; exit(0); } } 2.按要求写出程序片段:假设可执行程序名为proc1,运行程序时通过命令行参数main(int

argc,char *argv[])给出IP地址(192.168.0..98)和端口号(9999),即./proc1 192.168.0.98 9999, 若定义sockaddr_in server;请写出初始化server成员的代码段。 答:memset(&server,0,sizeof(server));

//bzero(&server,sizeof(server));

server.sin_family=AF_INET;

server.sin_port=htons(atoi(argv[2]));

server.sin_addr.s_addr=inet_addr(argv[1]);

//inet_aton(argv[1],&server.sin_addr);

3.写出客户端动态发送一维double型数组(要求从键盘输入数组规模及各数组元素)给服务器端的函数:void fun(int confd)。 答:

#include #include void fun(int confd) {int size; double *p; cin>>size;

send(confd,&size,sizeof(int),0); p=new double[size];

for(int i=0;i>p[i];

send(confd,p,sizeof(int)*size,0); delete []p; }

4.程序完善:向消息队列发送消息 #include ? ?(略) #define MSGKEY 92 struct msgform

{ long mtype; //存放消息类型 char mtext[200]; };

void main()

{ msgform msg; //定义消息缓冲区数据结构 int msgid;

msgid= msgget(MSGKEY,IPC_CREAT|660) ; //创建消息队列 msg.mtype=1;

cout<<“input mtext\\n”;

cin>>msg.mtest ; //从标准输入上输入消息内容

msgsnd(msgid,msgbuf *)msg,strlen(msg.mtest)+1 ,0); //向消息队列发消息 }


07-08网络程序设计A卷答案.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:八年级英语下册首字母填空练习(1)

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

马上注册会员

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