衡阳师范学院  2017-2018学年 第二学期 计算机科学与技术学院  网络工程专业 2015级 《基于TCP/IP 的网络程序设计》期末考试试题A 卷
一、单选题(每小题1分,共16分)
1. 在VC 中使用WinSock
2.2进行编程,需要引用头文件(  )
A. winsock.h
B. winsock2.h
C. winsock22.h
D. ws2_32.h
2. 下列哪个函数可以返回本机的IP 地址:
(
)
A. gethostbyname()
B. gethostname()
C. gethostbyaddr()
D. gethostaddr()
3. bind()函数要求的地址类型是
(      ) A. sockaddr_in        B. sockaddr
C. in_addr
D. inet_addr
4. 关于MAKEWORD(),下列说法中正确的是:
(      )  A. 是一个函数
B. 是一个运算符
C. 是一个宏定义
D. 功能是将两个整型数合并成一个WORD 型
5. 在程序中要使用cin 函数,则应包含下列哪个头文件 (      ) A. stdio.h      B. stdlib.h
C. iostream.h
D. windows.h
6. 在WinSock 的阻塞模式中,下列哪个函数不会引起阻塞(
)
A. listen()
B. accept()
C. send()
D. recv()
7.对于程序,char str[]="abcde"; int a=strlen(str); int b=sizeof(str);,
则a和b的值分别是:( )
A. 5, 5recv函数
B. 5, 6
C. 6, 5
D.5, 4
8.关于send()和Send()函数,下列说法中正确的是( )
A. send()和Send()是同一个函数
B. Send()函数在内部调用了send()函数
C. Send()是一个全局函数
D. Send()函数有4个参数
9.对于函数定义void CAsynSerDlg::OnSend(){…},可知( )
A. OnSend()是一个虚函数
B. CAsynSerDlg是类名
C. CAsynSerDlg是对象名
D. 函数的返回值为0
10.关于recv和recvfrom函数,下列说法正确的是:( )
A. recv是WinSock库中的函数,recvfrom是MFC类库中的函数
B. recvfrom函数内部调用了recv函数
C. recvfrom函数和recv函数的参数个数不同
D. recv只能用在TCP通信中,recvfrom只能用在UDP通信中
11.在WinSock中,UDP通信中bind()函数绑定的地址是( )
A. 本机地址
B. 远程地址
C. 服务器端绑定的是本机地址,客户端绑定的远程地址
D. 服务器端绑定的是远程地址,客户端绑定的本机地址
12.对于运算符“->”和“.”,以下说法中错误
..的是:( )
A. “->”前面是地址变量
B. “.”前面是地址变量
C. “->”后面是成员函数或成员变量
D. “.”后面是成员函数或成员变量
13.在非阻塞通信模式中,接收网络数据的程序应写在下列哪个网络事件
中:( )
A. FD_READ
B. FD_WRITE
C. FD_ACCEPT
D. FD_CONNECT
14.对于MFC程序,m_send.SetWindowText(c_send);,可知( )
A. m_send是值变量,c_send是控件变量
B. c_send是值变量,m_send是控件变量
C. m_send和c_send都是控件变量
D. m_send和c_send都是值变量
15.有语句:char sendbuf[256] ="服务器: >";,若要给sendbuf重新赋值,
正确的写法是:( )
A. char sendbuf[256] ="客户端: ";
B. sendbuf[256] ="客户端: ";
C. strcpy(sendbuf, "客户端: ");
D. strcat(sendbuf, "客户端: ");
16.关于WinSock套接字编程,下列说法中错误
..的是:( )
A. WSAAsyncSelect()函数不能用在控制台程序中
B. 客户端可以不使用bind()函数
C. 即使不使用WSAStartup()进行初始化,程序编译也不会出错
D. htons()函数的参数是一个表示端口号的字符数组
二、填空题(每题 2 分,共 22 分)
1. 网络应用程序可分为C/S、B/S和三种体系结构。
2. 套接字有3种,分别是数据报套接字、流式套接字和。
3. MFC提供了两个封装好的套接字类,分别是CSocket和。4.WinSock中的recv()函数,对应MFC中的函数。
5.异步通信对应WinSock的模式(填阻塞或非阻塞)。
6. 在MFC中,要向列表框中添加内容,需要使用函数。
7. MFC中,要弹出一个打开文件对话框,需要用到类。
8. 要弹出一个模态对话框,需要使用对话框类的对象的方法。
9. IDC_btn.EnableWindow(TRUE);表示。
10. listen()函数参数中的socket和函数参数中的socket 是同一个套接字(填 bind、recv、send、accept中的一个或多个)。11. 在VC中,要将一个字符数组与一个整型数连接在一起成为一个新的字符数组,可以使用函数。
三、简答题(每小题7分,共42分)
1. 在网络通信中,为了唯一标识通信双方的一个连接,需要用到一个五元组,这个五元组是什么?
2. 在MFC中,怎样把字符数组转换为CString字符串型数据?
3. 在TCP通信程序中,如何实现服务器与客户端之间的“一对多”通信?
4. 在TCP通信中,为什么服务器端需建立两个套接字,而客户端只需要建
立一个套接字?
5. 简述UDP通信中,服务器端程序和客户端程序的流程。
6.在Windows应用程序中,怎样实现不需要接收按钮自动接收网络消息?
四、程序分析题(每小题10分,共20分)
1.阅读下面的程序段,并解释程序中①-⑤处每条语句的作用,包括函数的功能和函数中各个参数的含义。
switch (message) {
case WM_INITDIALOG:
SetDlgItemText(hDlg,IDC_IP,"127.0.0.1"); //①
SetDlgItemText(hDlg,IDC_PORT,"5566");
sockSer=socket(AF_INET,SOCK_STREAM,0); //②
WSAAsyncSelect(sockSer, hDlg,WM_SOCKET,FD_ACCEPT |FD_READ); //③
return TRUE;
case WM_SOCKET:  //自定义消息
switch (WSAGETSELECTEVENT(lParam)){ //④
case FD_READ: {
recv(sockConn,recvbuf,256,0);
strcat(clibuf,recvbuf);
SendDlgItemMessage(hDlg,IDC_RECVBUF,LB_ADDSTRING,0,(LPARAM)clibuf);
//⑤指上面一行
strcpy(clibuf, "客户端: >");  }
break; }