没有合适的资源?快使用搜索试试~ 我知道了~
安徽理工大学2017网络编程试卷及卷参考答案.doc
0 下载量 113 浏览量
2024-05-12
01:53:13
上传
评论
收藏 108KB DOC 举报
温馨提示
试读
14页
安徽理工大学2017网络编程试卷及卷参考答案.doc
资源推荐
资源详情
资源评论
20 16 ~20 17 学年 第 2 学期 试 卷 课程名称:《网络编程》 考试形式:闭卷 试卷: A
第 ( 1 ) 页 共 ( 14 ) 页
专业班级: 计算机 14---1~4 专业班级: 学号: 姓名:
[该项由出卷人填写]
装 订 线
一、名词解释(写出要点即可)(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 recbuf[512],dtfmt[512];//接收缓冲区和发送缓冲区
char *caddr=NULL,*cport=NULL;//服务器地址和端口
if (argc==2){//命令行格式为:getserv SrvIP:SrvPort
① ;
② ;;
}else{//缺省地址
caddr="127.0.0.23";
cport="9090";
}
/*创建套接口*/
③ ;
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 (z<0) bail("recvfrom(2)");
/*客户端请求处理*/
recbuf[z]=' ';
if (!strcasecmp(recbuf,"QUIT")) break;
/*客户端请求处理*/
20 16 ~20 17 学年 第 2 学期 试 卷 课程名称:《网络编程》 考试形式:闭卷 试卷: C
第 ( 2 ) 页 共 ( 14 ) 页
专业班级: 专业班级: 学号: 姓名:
[该项由出卷人填写]
装 订 线
memset(dtfmt,0,sizeof dtfmt);
res=lookfor(dtfmt,recbuf);//获得处理结果
if (!res) sprintf(dtfmt,"error!");
/*返回格式化结构,并发送到客户端*/
⑨ ;
if (z<0) bail("sendto(2)");
}
⑩ ;
return 0;
}
2、阅读下面程序,给出序号出的功能。
void sig_handler(int signo){
pid_t pid;
int stat;
pid=waitpid(-1,&stat,WNOHANG);
while (pid>0) 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_buf[MAX_BUF],snd_buf[MAX_BUF];
pid_t pid;
struct sockaddr_in clt_addr,srv_addr;
int z, reuseaddr,opt_len,srcfd,dst_file;
if (argc!=2){
printf("Usage: %s port\n",argv[0]);
return 1;
}
//获得输入的端口号
port=atoi(argv[1]);
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_fd<0) 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;
}
//监听指定端口,连接 5 个客户端
ret=listen(listen_fd,5);
if (ret==-1){
perror("cannot listen to the client connect
request");
return 1;
}
/*
** 对每个连接进来的客户端创建一个进程,单独与服务器进
行通信
** 首先调用 read 函数读取客户端发送来的信息,将其转换成
大写后
** 发送回客户端,当输入"@"时,程序退出
*/
while (TRUE){
len=sizeof clt_addr;
com_fd=accept(listen_fd,(struct sockaddr
*)&clt_addr,&len);
if (com_fd<0){
if (errno==EINTR){//系统调用的执行由于
捕获中断而终止
continue;
}else{
perror("cannot accept client
connect request");
close(listen_fd);
return 1;
}
}
pid=fork();
if (pid<0){
perror("cannot create the child
process");
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;
}
20 16 ~20 17 学年 第 2 学期 试 卷 课程名称:《网络编程》 考试形式:闭卷 试卷: C
第 ( 3 ) 页 共 ( 14 ) 页
专业班级: 专业班级: 学号: 姓名:
[该项由出卷人填写]
装 订 线
//⑥
ret=listen(listen_fd,5);
if (ret==-1) return 1;
while (TRUE){
len=sizeof clt_addr;
com_fd=accept(listen_fd,(struct sockaddr *)&clt_addr,&len);
if (com_fd<0){
if (errno==EINTR){ //⑦
continue;
}else{
close(listen_fd);
return 1;
}
}
pid=fork();
if (pid<0){ //⑧
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;
}
四、编程(15*2=30 分)
1、 编程实现从给定的 IP 地址中取出网络标识,并以点分十进制输出 IP 地址和
网络标识。
2、 设计一段程序,作为服务器端,本机地址 192.193.194.195,端口 2000,监
听队列长 5,采用字节流模式,INET 地址模式 ;实现服务器功能。
剩余13页未读,继续阅读
资源评论
平头哥在等你
- 粉丝: 2
- 资源: 7332
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功