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
send(confd,&size,sizeof(int),0); p=new double[size];
for(int i=0;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); //向消息队列发消息 }
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库07-08网络程序设计A卷答案在线全文阅读。
相关推荐: