1一.选择题1.Internet中的主要通信协议是(D)A.HTMLB.HTTPC.ARPAD.TCP/IP2.OSI参考模型将网络通信的工作划分为7个层次,不属于OSI参考模型的层次是(B)A.网络层B.通信层C.会话层D.物理层3.ping命令使用的协议为(D)A.TCPB.UDPC.ARPD.ICMP4.Telnet使用(A)端口来建立连接A.TCP端口23B.UDP端口23C.ARP端口25D.ICMP端口255.在VisualC++中,通常使用WinSock2.2实现网络通信的功能,则需要引用头文件为(B)A.Winsock.hB.winsock2.hC.winsock22.hD.winsock2.2.h6.将u_long类型的主机字节顺序格式IP地址转换为TCP/IP网络字节顺序格式的函数是(A)A.htomlB.htonsC.ntohlD.ntohs7.下面不属于Socket编程模式的是(D)A.Select模型B.WSAAsyncSelect模型C.WSAEventSelect模型D.完成例程模型8.下面模型使用线程池处理异步I/O请求的是(D)A.Select模型B.WSAAsyncSelect模型C.WSAEventSelect模型D.完成例程模型9.在ioctlsocket()函数中使用(A)参数,并将argp参数设置为非0值,可以将Socket设置为非阻塞模式。A.FIONBIOB.FIONREADC.SIOCATMARKD.FIONONBLOCK10.在执行select()函数时如果出现错误则返回(D)A.0B.-1C.NULLD.SOCKET_ERROR二.填空题1.TCP/IP协议簇中包含网络接口层、网络层、传输层和应用层。2.FTP用于建立控制连接的端口为21;当需要传输文件数据时,客户端程序将连接服务器的端口20。3.根据基于的底层协议不同,Socket开发接口可以提供__面向连接___和_无连接__两种服务方式。4.在计算机中使用无符号长整型数(unsignedlong)来存储和表示IP地址,而且分为__网络字节顺序__和_主机字节顺序__两种格式。5.在VisualC++中使用结构体__in_addr__来保存网络字节顺序格式的IP地址。6.Socket编程可以分为___阻塞__和___非阻塞__两种开发模式。7.默认情况下,最多可以管理的Socket数量为__1024_个。8.在select()函数中使用___fd_set__结构体来管理多个Socket。9.在WSAAsyncSelect模型中,应用程序可以在一个Socket上接收以_Windows消息__为基础的网络事件通知。10.两个主机使用TCP进行通信可以分为3个阶段,即建立连接阶,数据传输阶段和断开连接释放资源阶段。三、简单题1、简述TCP和UDP的区别。UDP是一种不可靠的协议,在传送数据时,源主机和目的主机之间不建立连接。而TCP协议为了确保数据传输的准确和安全可靠,集成了各种安全保障功能,这在实际执行过程中会占用大量的系统开销。因此,UDP具有TCP无法比拟的速度优势。相对于可靠性而言,基于UDP的应用更注意性能。与TCP相比,UDP更适合发送数据量比较少、但对响应速度要求比较高的情况。2、简述FTP的两种连接模式。答:FTP支持两种运行模式,即主动模式和被动模式,它们的区别在于控制如何打开第2个连接。1.主动模式:在主动模式下,客户端向服务器发送自己用于数据连接的IP地址和端口号,然后由服务器程序打开数据连接。2.被动模式:当客户端在防火墙后面或者无法接收TCP连接时,通常建议采用被动模式。在被动模式下,服务器向客户端发送自己用于数据连接的IP地址和端口号,则客户端打开数据连接。3、简述winpcap提供的主要功能及典型的应用。主要功能:捕获网络原始数据包;根据用户定义的规则过滤数据包;发送用户构造的数据包到网络中;统计网络流量;保存捕获的数据包。典型应用:网络协议分析器;网络监听器;网络流量记录;网络流量产生器;用户级的网桥和路由器;网络入侵检测系统;网络扫描器;网络安全工具。4、简述流式Socket和数据报式Socket的区别。表5.1流式套接字和数据报式套接字的区别比较项目流式套接字数据报式套接字建立和释放连接√×保证数据到达√×按发送顺序接收数据√×通讯数据包含完整的目的地址信息×√5、简述socket提供三种类型的套接字。1.流式套接字提供面向连接的、可靠的数据传输服务,可以无差错地发送和接收数据。2.数据包套接字提供了一种无连接、不可靠的双向数据传输服务。3.原始套接字该接口允许对较低层协议,如IP、ICMP直接访问。四、编程题通常我们使用winsock2.2来进行网络编程。请补全下面代码以及添加注释。#includestdafx.h#includeiostream#include(1)#pragmacomment(lib,(2))//完整的服务端程序intmain(intargc,char*argv[]){constintBUF_SIZE=64;WSADATAwsd;//WSADATA变量SOCKETsServer;//服务器套接字SOCKETsClient;//客户端套接字SOCKADDR_INaddrServ;;//服务器地址charbuf[BUF_SIZE];//接收数据缓冲区intretVal;//返回值if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)//(3){printf(失败!);return1;}sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//(4)if(INVALID_SOCKET==sServer){printf(失败!\n);WSACleanup();//释放套接字资源;return-1;}//服务器套接字地址addrServ.sin_family=(5);addrServ.sin_port=htons(4999);addrServ.sin_addr.s_addr=INADDR_ANY;retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));(6)if(SOCKET_ERROR==retVal){printf(失败!\n);closesocket(sServer);//关闭套接字WSACleanup();//释放套接字资源;return-1;}//4.开始监听retVal=(7)(sServer,1);if(SOCKET_ERROR==retVal){printf(监听任务失败!\n);closesocket(sServer);//关闭套接字WSACleanup();//释放套接字资源;return-1;}//接受客户端请求sockaddr_inaddrClient;intaddrClientlen=sizeof(addrClient);sClient=(8)(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);//5.接受链接if(INVALID_SOCKET==sClient){printf(接受链接启动失败!\n);closesocket(sServer);//关闭套接字WSACleanup();//释放套接字资源;return-1;}while(true){//接收客户端数据ZeroMemory(buf,BUF_SIZE);//清空retVal=(9)(sClient,buf,BUF_SIZE,0);//读取数据if(SOCKET_ERROR==retVal){printf(接受客户端数据失败!\n);closesocket(sServer);closesocket(sClient);WSACleanup();return-1;}if(buf[0]=='0')break;printf(客户端发送的数据:%s\n,buf);printf(向客户端发送数据:%s\n,buf);(10)(sClient,buf,strlen(buf),0);//向客户端发送数据}//退出closesocket(sServer);//关闭套接字closesocket(sClient);//关闭套接字WSACleanup();//释放套接字资源;return0;}答案:1.winsock2.h2.ws2_32.lib3.初始化套结字动态库4.创建套接字5.AF_INET6.绑定套接字7.listen8.accept9.recv10.send