网络程序设计试题A卷-2013(李金库)
- 格式:doc
- 大小:57.50 KB
- 文档页数:10
西安电子科技大学《网络程序设计》试题
(2013年A卷)
考试时间120 分钟试卷编号
班级学号姓名任课老师姓名
一、单选题(10×2分=20分)
1.以下字段中,不属于IP首部的是
A. 协议类型
B. 生存时间
C. 源IP地址
D. 目的端口号
2.以下函数中,不会产生阻塞的是
A. send( )
B. sendto( )
C. connect( )
D. listen( )
3.进程A是进程B的父进程,当A正在运行时B退出,下列叙述中正确的是
A.进程A也将退出
B.进程A将收到SIGCHLD信号
D.进程A将收到SIGKILL信号
D.进程A会成为僵尸进程
4.整数0x12345678在little-endian字节序主机内存中的存储形式是_________(注:内存由低到高)
A. 12 34 56 78
B. 78 56 34 12
C. 34 12 78 56
D. 56 78 12 34
5.使用信号驱动I/O时哪一个不是必须要执行的操作
A.为信号SIGIO关联一个信号处理函数
B.设置套接字为非阻塞模式
C.设置套接字所有者
D.允许套接字进行信号驱动I/O
6.对使用UDP协议的套接字调用connect函数,下面叙述中正确的是A.connect函数将阻塞
B.connect函数将导致3次握手操作
C.connect函数记录对方的IP地址和端口后立刻返回
D.不能对使用UDP协议的套接字描述符调用connect函数
7.对函数调用send(sockfd,“12xyz”,5,MSG_OOB)的描述中正确的是
A.只有字符z被写入发送缓冲区
B.只有字符串12xy被写入发送缓冲区
C.字符串12xyz中的每个字符都将作为带外数据发送
D.TCP协议发送的下一个报文段中URG标志将置位
8.在给网络地址附值时,程序如果使用“INADDR_ANY”,则表明A.对于只有一个IP地址的主机,使用“127.0.0.1”地址
B.对于有多个网卡的主机,使用其中任意一个IP地址
C.对于有多个网卡的主机,表示所有IP地址,并处理所有地址的请求D.以上均不对
9.请求建立连接时TCP包头中的_________标志位有效
A. SYN
B. RST
C. PSH
D. URG
10.当通信的对方关闭其写通道时,TCP套接字的读函数read( )将_ __ A.返回大于0的整数 B.返回小于0的整数
C.阻塞
D.返回0
二、判断下面命题的正确性,对不正确的命题,说明错误原因(5×2=10分)1.一般情况下,守护进程是在后台运行。
2.Browse/Server模型主要事务在服务器端实现,一部分事务在前端实现。
3.阻塞式I/O是套接字的默认模型。
4.IP数据包首部中TTL=64表示数据包在网上的最大生存时间是64秒。
5.可以只用通信双方的IP地址来标识一条TCP网络连接。
三、简答题(5×5分=25分)
1.请简述4种Linux系统中进程间的通信机制。
2.套接字函数close( )与shutdown( )的差别?
3.请简述循环服务器模型和并发服务器模型的区别。
4.怎样将阻塞式套接字转变为非阻塞式套接字?
5.Linux系统主要实现了哪几种输入/输出模型?请简述每种模型的特点。
四、当服务器采用并发服务器进行有连接的通信时,采用以下程序段的编程
模式来处理应用,请将程序的空白处完善。
(4×3分=12分)
int sockfd,newsockfd;
if ((sockfd = socket(…)<0)
Err_sys (“socket error.”);
if …)<0)
Err_sys (“error.”);
if
Err_sys (“error.”);
for( ; ; )
{
newsockfd =
if (newsockfd < 0)
Err_sys (“ error.”);
= =0)
{
close(sockfd);
…
doit(newsockfd); //用newsockfd 处理具体连接请求
close(newsockfd);
exit(0);
}
close(newsockfd);
}
……
五、阅读以下程序,详细说明该程序的功能。
(10分)
……
void sigchld_handler(int);
int main()
{
struct sigaction act;
int i;
act.sa_handler=sigchld_handler;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
if(sigaction(SIGCHLD,&act,NULL)<0){
c out<<"sigaction error."<<endl;
e xit(1);
}
for(i=0;i<5;i++){
i f(fork()==0){
cout<<"child "<<getpid()<<endl;
exit(0);
}
}
for(;;){}
return 0;
}
void sigchld_handler(int sig)
{
pid_t pid;
int stat;
for(;(pid=waitpid(-1,&stat,WNOHANG))>0;)
{
c out<<"child"<<pid<<"died:"<<WEXITSTATUS(stat)<<endl;
}
}
六、使用UDP套接字编程(13分)
客户机发送20个整数给服务器,服务器在其中找到这些整数的最大值,返回给客户机。
七、编写一个服务器程序,使其能够实现TCP并发服务,并且打印出每个
连接成功的客户端的IP地址及其端口号(10分)。