2024年4月27日发(作者:)

《网络编程技术》复习题

一、填空题

1、 计算机网络上传输的数据都是以分组(packet)为单位的,分组实际就是一个由二进制

字节构成的序列,它包括__________和控制信息两部分。

2、 路由表中缺省路由的掩码为______________。

3、 一台计算机如果只向网络中的某一台计算机发送数据称为单播,如果要同时向网络中的

所有计算机发送信息,则被称为__________。

4、 用来描述如何实现网络体系结构中各层次功能的具体方法和步骤的是________。

5、 如果调用函数gethostbyname()失败,返回一个_____________________ 。

6、 网络应用进程间的通信普遍采用C/S交互模式,在该模式中,通信双方中发起通信的一

方被称为___________。

7、 套接字编程接口有两种实现方式,第一种是通过通过在操作系统核心添加相应模块,另

一种通过操作系统之外的函数库来实现。Windows Socket就是以_______________方式实

现的。

8、 Windows Socket套接字包括流式套接字 (SOCK_STREAM)、________________________以

及原始套接字(SOCKET_RAW)三种类型。

9、 在使用C语言编程时,通常使用WinSock2.2实现网络通信的功能,则需要引用库文件

______________。

10、 函数socket(AF_INET,SOCK_STREAM,0);的功能是________________________。

11、 要将一个套接字设置为非阻塞模式应使用的套接字函数是(只写函数名)_____________。

12、 监听函数调用listen(s,3),其中参数3的含义是________________________。

13、 在select()函数中使用______________结构体来管理多个Socket。

14、 IP广播地址分为两种:______________________和有限广播地址。

15、 自定义IP分组是指IP首部各字段值均由应用程序填写的IP分组。要使一个原始套接字

能够发送自定义IP分组,该套接字的IP_HDRINCL选项值应设置为_____________。

16、 __________规定了网络的层次结构以及各层应具有的功能,但对各层功能的实现方法不

做具体规定。

17、 物理线路连同实现链路通信协议的硬件和软件一起被称为_____________。

18、 以太网的数据帧中,目的地址通常是____________的MAC地址。

19、 从以太网交换机的工作原理可知,网中的任何一台计算机发送一个广播信息,网中所有

的计算机都能收到,因此称能收该广播帧的这些计算机在同一个___________中。

20、 Winsock函数getservebyname()的功能是根据给定的服务名称和该服务所使用的

___________获取端口号等信息。

21、 套接字编程接口源于美国加州大学伯克利分校开发推广的一个包括TCP/IP协议的操作

系统BSD UNIX,它是该操作系统提供给其用户的网络应用程序____________________。

22、 套接字编程接口有两种实现方式,第一种是通过在操作系统核心添加相应模块,另一种

通过操作系统之外的_______________来实现。

23、 当程序使用完提供的服务后,应用程序必须调用_________________函数,

来解除与库的绑定,释放WinSock实现分配给应用程序的系统资源。

24、 监听函数调用listen(s,4),其中参数4的含义是________________________。

25、 socket套接字的三种类型:流式套接字 (SOCK_STREAM)、数据报套接字(SOCK_DGRAM) 及

______________。

26、 套接字有阻塞和非阻塞两种工作模式,在_________模式下,I/O操作完成前执行操作的

函数会一直等候而不立即返回。

27、 WinSock的套接字I/O模型中的Select模型是因为该模型使用函数__________实现而得

名的。

28、 socket(AF_INET,SOCK_DGRAM,0);该函数的功能是________________________。

29、 用于获取Socket选项的函数是(只写函数名)_____________。

30、 要使一个原始套接字能够发送自定义IP分组,在创建该套接字时,socket()函数的第三

个参数(协议类型)的值应使用________________。

二、选择题

1、 关于以太网的MAC地址,以下说法错误的是( )。

A.是一个6字节长的无符号二进制数。

B.48位全为1的MAC地址被称为广播地址,不能分配给任何计算机。

C.以太网中的每台计算机最多只可以分配一个MAC地址。

D.广播地址在以太网帧中只可以做目的地址,不可以作为源地址。

2、 关于端口号,以下说法错误的是( )。

A.使用TCP或UDP通信的应用进程都至少需要分配一个端口号。

B.同一台机器上分别使用UDP和TCP通信的两个进程不能分配数值相同的端口号。

C.无论是TCP端口号还是UDP端口号,均是一个16位无符号二进制整数。

D.TCP报文段的目的端口号就是分配给要接收该报文段中的数据的进程的端口号。

3、 关于套接字编程接口,下列说法不正确的是( )。

A.套接字编程接口是操作系统提供的与网络通信相关的应用程序编程接口。

B.最早的套接字编程接口是Berkeley套接字编程接口。

C.微软的套接字编程接口WinSock是Windows系统核心的一部分。

D.操作系统提供的套接字分为流式套接字、数据报套接字和原始套接字三种。

4、 以下叙述错误的是( )。

A.in_addr结构中的IP地址是网络字节顺序存储的

B.in_addr结构可以同时存储3种不同方式表示的IPv4地址

C.sockaddr_in结构变量可以保存地址族、端口号和IP地址三种地址信息

D.sockaddr_in结构变量与sockaddr结构变量中存储的内容与顺序完全一致

5、 调用bind()函数为服务器端的监听套接字绑定地址时,以下描述错误的是( )。

A. IP地址设置为INADDR_ANY,表示该套接字的IP地址由系统自动指定。

B. 可将PORT定义为0,这时系统会自动为期分配一个端口号。

C. 不绑定地址也不会出现明显错误,当调用listen()时系统会为其自动分配。

D. bind()函数执行成功将返回True,否则返回SOCKET_ERROR。

6、 在流式套接字编程中,服务器端每成功调用一次accept()函数,该函数都会返回一个用

于同客户端通信的已连接套接字,该已连接套接字( )。

A. 没有绑定IP地址,端口号与监听套接字相同

B. 绑定的IP地址与监听套接字的相同,端口号由系统随机分配

C. 绑定的IP地址与端口号均与监听套接字的相同

D. 没有绑定IP地址,端口号由系统随机分配

7、 要获取一个套接字绑定的IP地址和端口号,需要调用函数( )。

A. getsockname() B. getpeername()

C. getsockbyname() D. getpeerbyname()

8、 在阻塞模式下调用recv()函数,若等待数据到达过程中对方断开连接,recv()将( )。

A. 返回0 B. 继续等待 C. 返回SOCKET_ERROR D. 返回-1

9、 在下面的函数声明中,不能作为线程函数的是( )。

A.DWORD f1( LPVOID p); B.int f2();

C.int f3(int x); D.DWORD f4( LPVOID p, int x);

10、 使用多线程技术实现TCP并发服务器时,( )。

A.主线程创建套接字并启动监听,子线程调用accept()与客户建立连接并完成通信。

B.主线程调用accept()与客户建立连接,并将accept()返回的套接字传递给子线程。

C.主线程使用不同的线程函数,分别为每一个客户创建一个子线程进行通信。

D.传递给多个子线程的已连接套接字是同一个套接字。

11、 在ioctlsocket()函数中使用( )参数,并将argp参数设置为非0值,可以将Socket

设置为非阻塞模式。

A.FIONBIO B.FIONREAD C.SIOCATMARK D.FIONONBLOCK

12、 如果套接字集合fdread非空,则关于语句select(0, &fdread, NULL, NULL, NULL);的

叙述正确的是( )。

A.如果fdread中的所有套接字均未收到数据,select()将阻塞等待1000ms。

B.如果fdread中的所有套接字均未收到数据,select()将立即返回,返回值为0。

C.如果fdread中有套接字收到数据,select()立即返回,返回值为0。

D.如果fdread中有套接字收到数据,select()立即返回,返回值为有数据到达的套接

字个数。

13、 下面函数中在无连接程序开发中不会调用的函数是( )。

A. sendto() B. socket() C. listen() D. recvfrom()

14、 如果将已绑定本地地址的数据报套接字设置为允许发送广播数据,则( )。

A. 该套接字只能发送广播数据。

B. 该套接字可以接收广播数据,但不能收到发给本地地址的单播数据。

C. 该套接字即可以发送广播数据,也可以发送单播数据包。

D. 该套接字可以发送广播数据,也可以发送单播数据,但不可以接收数据。

15、 要将原始套接字sRaw,绑定的网卡设置为混杂模式可使用( )。

A. DWORD dwValue = 1;

ioctlsocket(sRaw, SIO_RCVALL, &dwValue);

B. DWORD dwValue = 0;

ioctlsocket(sRaw, SIO_RCVALL, &dwValue);

C. DWORD dwValue = 1;

setsockopt (sRaw, SIO_RCVALL, &dwValue);

D. DWORD dwValue = 0;

setsockopt (sRaw, SIO_RCVALL, &dwValue);

16、 计算机网络可以被理解为( )。

A.多个计算机执行数据处理的软件模块

B.由自主计算机互联起来的集合体

C.多个处理器通过共享内存实现的紧耦合系统

D.用于共同完成一项任务的分布式系统

17、 以下关于路由器的描述错误的是( )。

A.路由器是一种分组交换设备

B.路由器实际上是一种具有多个网络接口的专用计算机

C.路由器可实现使用不同传输介质的网络的互联。

D.路由器同网桥一样,都是工作在数据链路层。

18、 下列关于UDP协议的叙述中,正确的是( )。

Ⅰ 提供无连接服务

Ⅱ 提供复用/分用服务

Ⅲ 通过差错校验,保障可靠数据传输

A.仅Ⅰ B. 仅Ⅰ、Ⅱ C. 仅Ⅱ、Ⅲ D. Ⅰ、Ⅱ、Ⅲ

19、 在C语言中通常使用WinSock2.2实现网络通信功能,这时需要引用头文件( )。

A.Winsock2.h B.winsock.h C.winsock22.h D.winsock2.2.h

20、 可以将in_addr结构中的IP地址转换为点分十进制字符串方式的函数是( )。

A.inet_addr() B.inet_aton() _ntoa() D.ntohs()

21、 下面能实现把端口号从本机字节顺序转换到网络字节顺序的函数是:( )

A. htons( ) B. htonl( ) C. ntohl( ) D. ntohs( )

22、 下面对bind()函数的功能描述错误的是( )。

A. 该函数仅适用于流式套接字。

B. 该函数用来将套接字绑定到指定的网络地址上。

C. 该函数一般在connect()或listen()函数调用前使用。

D. 在客户机端使用的套接字一般不必绑定,除非要指定它使用特定的网络地址。

23、 客户端发出connect( )调用后,若返回WSAETIMEOUT,表示:( )

A. 无可用缓冲区 B. 参数不正确 C. 套接口早已连接 D. 超时时间到

24、 在流式套接字编程中,客户端建立连接用的套接字( )。

A. 必须调用bind()函数绑本地定IP地址和端口号

B. 不必调用bind()函数绑定本地IP地址和端口号,系统会自动为其分配

C. 不必调用bind()函数绑定本地IP地址和端口号,因为它根本不需要

D. 不必调用bind()函数绑定本地IP地址和端口号,它由connect()函数的参数指定

25、 下面叙述正确的是( )。

A.在同一进程中,一个线程函数只可以创建一个线程。

B.只有当进程中的所有线程都运行完毕,进程才会结束。

C.主线程是程序启动时由系统创建的,而子线程是由主线程或其他子线程创建的。

D.子线程在创建时,父线程会为其分配独立的地址空间。

26、 若线程函数原形为 DWORD f();,则以下创建线程语句正确的是( )。

A.CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)f, NULL, 0, &trdID);

B.CreateThread(NULL, 0, f, NULL , 0, &trdID);

C.CreateThread(NULL, 0, f(), NULL , 0, &trdID);

D.CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)f(), (LPVOID) 5 ,NULL);

27、 要将套接字设置为非阻塞模式,以下最准确叙述为( )。

A.能使用setsockopt()函数 B.能使用ioctlsocket()函数

C.可使用ioctlsocket()或setsockopt()函数 D.以上叙述均正确

28、 用于判断某个套接字是否在套接字集合的宏是( )。

A.FD_ZERO B.FD_CLR C.FD_ISSET D.FD_SET

29、 能够将数据报套接字Sock1设置为允许发送广播数据的代码是( )。

A. int yes=1;

int size= sizeof(int);

setsockopt(Sock1,SOL_SOCKET,SO_BROADCAST,(char*)&yes,size);

B. BOOL yes=FALSE;

int size= sizeof(BOOL);

setsockopt(Sock1,SOL_SOCKET,SO_BROADCAST,(char*)&yes,size);

C. BOOL yes=TRUE;

int size= sizeof(BOOL);

setsockopt(Sock1,IPPROTO_IP,SO_BROADCAST,(char*)&yes,size);

D. int yes=1;

int size= sizeof(int);

setsockopt(Sock1,IPPROTO_IP,SO_BROADCAST,(char*)&yes,size);

30、 关于原始套接字,以下叙述不正确的是( )。

A. 可以直接发送或接收IP、ICMP、IGMP等网络层协议的报文。

B. 通过原始套接字可以将网卡设置为混杂模式,使程序能接收任何流经网卡的IP分组。

C. 基于原始套接字的通信是无连接、不可靠的。

D. 可以接收除首部的协议字段不能被识别的IP分组之外的所有IP分组。

三、判断题

1、 网络字节顺序采用的是大端存储方式。( )

2、 WSAGetLastError()函数的返回值是调用该函数之前的最近一次调用WinSWock函数出错

时错误所对应的错误代码。( )

3、 TCP客户端套接字不能绑定地址。( )

4、 新创建的数据报套接字不需要调用bind()函数绑定本地地址也能接收数据。( )

5、 如果只用于接收数据,则数据报套接字必需绑定本地地址。( )

6、 非阻塞模式下,在套接字还没收到任何数据时调用recv()函数接收数据,recv()函数调

用将会失败,这时的函数返回值为WSAEWOULDBLOCK。( )

7、 多线程技术是实现并发服务器的唯一技术。( )

8、 调用select()函数时,它的三个套接字集合指针类型的参数非空时,指针指向的套接字

集合中必须至少有一个套接字。( )

9、 Windows系统中,使用原始套接字可以发送任何IP数据包。( )

10、 C/S模式中UDP socket的服务器端必须调用bind()函数来绑定一个地址,这样客户端才

可以和服务器端通信 ( )

11、 编写网络程序时,发送端必须先将待发送的多字节数据转换成与具体CPU无关的网络字

节顺序再发送。( )

12、 gethostbyname() 函数只能根据给定的本机的主机名称查询本机的IP地址,不能通过