当前位置:首页 >> 其它课程 >> 网络程序设计复习题

网络程序设计复习题


1.什么叫套接字?套接字按通信性质可以分为哪两类? 多个 TCP 连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。 为了区别不同的应用程序进程和连接, 许多计算机操作系统为应用程序与 TCP/IP 协议交互提供了称为套接字(Socket)的接口。套接字按通信性质分:会话 套接字和数据报套接字。 2.理解线程的创建与使用方法,并能应用到程序设计中。P66 3、异

构环境下的网络程序设计需要考虑哪些问题? 1) 字节顺序:不同的平台以不同的方式存放一个二进制数。最常见的有两种格式:大数在前的字节顺序和小数在 前的字节顺序。大数在前的字节顺序是指将一个多字节数的 高序字节存储在内存的起始地址;而小数在前的字节顺序 则相反,将低序字节存储在 内存的起始地址。 2) 字的长度:不同的实现对于相同的数据类型可能有不同的表示长度。 3) 字节定界问题:不同的平台上为结构体(struct)或共同体(union)打包的方式也是不同的,这取决于所有 数据类型的位数及机器的定界限制。 4、为什么在数据结构 struct sockaddr_in 中,成员变量 sin_addr 和 sin_port 需要转换为网络字节顺序,而 sin_family 不需要呢? Sin_addr 和 sin_port 分别封装在包的 IP 和 UDP 层,必须要是网络字节顺序。 Sin_family 域只是被内核使 用来决定在数据结构中包含什么类型的地址,没有发送到网络上,所以它必须是本机字节顺序 5、从网络编程的角度来简述和比较 IP 地址和端口的作用。 端口:是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接(binding) 后,传输层传给该端口的 数据都被相应进程所接受,相应进程发给传输层的数据都通 过该端口输出。在 TCP/IP 协议的实现中,端口操作类似 一般的 I/O 操作,进程获取一 个端口,相当于获取本地唯一的 I/O 文件。 地址:网络通信中通信的两个进程在不 同的机器上。这两个机器可能位于不同的网 络,这些网络通过网络互联设备连接。因此需要三级寻址:某一主机与多 个网络相 连,必须指定一特定网络地址;网络上每一主机应有唯一的地址;每一主机上的每一 进程有在主机上的唯 一标识符。 6、为什么网络编程时需要考虑字节顺序问题? 不同的平台以不同的方式存放一个二进制数。最常见的有两种格式:大数在前的字节顺序和小数在前的字节顺序。大 数在前的字节顺序是指将一个多字节数的 高序字节存储在内存的起始地址;而小数在前的字节顺序则相反,将低序字 节存储在 内存的起始地址。 7、WinSock 编程中需要哪些文件? 1) ws2_32.dll 是 Windows Sockets 应用程序接口, 用于支持 Internet 和网络应用程序。程序运行时会自动调用 ws2_32.dll 文件,ws2_32.dll 是个动态链接库文件位于系统文件夹中。 2) Ws2_32.lib:里面定义了所有套接口函数的功能,在链接阶段,需要使用套接口的执行代码。 3) Winsock2.h:所有套接口函数的声明都放在这个头文件中,因此,我们所写的套接口程序必须把该头文件包含进来。 8、 程序的工作模型隐含着通信标识五元组的建立过程。 UDP 这五元组在 UDP 的客户与服务端是由哪些函数分别确定的? 客户端:socket()函数确定通信协议,sendto()函数确定确定远地地址和远地端口,在发送信息时,如未绑 定本地地址和本地端口,会自动调用 bind()函数进行绑定。 服务端:socket()函数确定通信协议,bind()函数确定本地地址和本地端口,必须显示调用 bind()函数, 否则无法接受数据,recvform()确定远地地址和远地端口。 9、什么是阻塞与非阻塞通信?请解释两者的区别。 通信包括阻塞和非阻塞两种模式。阻塞调用是指调用结果返回之前,当前线程会被挂起。 阻塞调用 函数只有在 得到结果之后才会返回。非阻塞和阻塞的概念相对应,指在不能立刻得到结果 之前,该函数不会阻塞当前线程,而会 立刻返回。 区别:对于不同的协议,阻塞通信和非阻塞通信有不同的表现。以端口为例,利用 TCP 协议发送一个报 文时,如果低层协议没有可用空间来存放用户数据,则 应用进程将阻塞等待直到协议有可用的空间。而在非阻塞模式 下,调用将直接返回而不需 等待。在应用进程调用接收函数接收报文时,如果是在阻塞模式下,若没有到达的数据, 则调用将一直阻塞直到有数据到达或出错; 而在非阻塞模式下, 将直接返回而不需等待。 对于 UDP 协议而言, 由于 UDP 没有发送缓存,因此所有 UDP 协议即使在阻塞模式下也不会发生阻塞。 对于面向连接的协议,在连接建立阶段,阻 塞与非阻塞也表现不一。在阻塞模式下,如果 对于面向连接的协议 没有连接请求到达,则等待连接调用将阻塞直到 有连接请求到达;但在非阻塞模式下,如 果没有连接请求到达,等待连接调用将直接返回。 10、简述各种类型数据的发送与接收处理的方法。P27 整数:/*UDP 发送整数示例*/ int a = 1234; int sByte = sendto(sock,(char *)&a,sizeof(a),0,(sockaddr *)&RemotAaddr,sizeof(RemotAaddr)); /*UDP 接收整数示例*/ int b,*p; char rbuf[1024]; int rByte = recvfrom(sock,rbuf,1024,0,NULL,NULL); p=(int *)rbuf; b=*(int *)rbuf;

/*UDP 发送结构体示例*/ Stu stu; strcpy(stu.name,”张三”); stu.score=85; int sByte = sendto(sock,(char *)&stu,sizeof(stu),0,(sockaddr *)&RemotAaddr,sizeof(RemotAaddr)); /*UDP 接收结构体示例*/ Stu stu,*p; char rbuf[1024]; int rByte = recvfrom(sock,rbuf,1024,0,NULL,NULL); p=(Stu *)rbuf; memcpy(&stu,rbuf,sizeof(Stu)); 11、简述基于 UDP 的客户机/服务器端 socket 编程流程。 编程流程如下:服务器端首先调用 socket()函数建立 Socket,返回该 Socket 的描述符,调用 bind()函数 配置 Socket 的本地端口和 本地 IP 地址; 立 recvfrom 接收函数, 建 () 接收客户端发送的信息。 客户端调用 socket ()函数建立一个 Socket,返回该 Socket 的描述符; 可以不用显示调用 bind()函数绑定本地地址和本地端口,因为向服务器发送数据时,若没用绑定地址系统会自动调 用函数进行绑定;建立 sendto()函数向服务器发送数据。双方通信结束后,关闭其 Socket 12、什么是通信三元组和五元组?三元组和五元组每个元素在网络连接中起到什么作用? 三元组:(协议,本地地址,本地端口号);(在网络中用一个三元组可以在全局唯 一标志一个进程: (协议, 本地地址,本地端口号)这样一个三元组,叫做一个半相 关(half-association),它指定连接的每半部分。)五元 组:(协议,本地地址,本地端口号,远地地址,远地端口号)(即两个协议相 同的半相关才能组合成一个合适的相 关,或完全指定组成一连接。) 13、 为什么服务端在 TCP 通信过程中需要调用 bind( )函数而客户端不需要?为什么客户机通常不需要绑定自己的端口 号? 套接口作为通信的端点,必须要有具体的地址才能进行通信,作为服务器端的套接口,它在绑定好本地地址之前, 是没有办法接收数据的。而在客户端,套接口没必要显示的调用 bind()函数,是因为系统在通信前发现套接口未绑 定好具体的地址时,会自动的给它绑定上一个未被分配给其它套接口的地址和端口。 14、简述套接字 Select 模型原理,以及 select 模型的优势和不足。 利用 select 函数,判断套接字上是否存在数据,或者能否向一个套接字写入数据。目的是防止应用程序在套接字 处于锁定模式时,调用 recv(或 send)从没有数据的套接字上接收数据,被迫进入阻塞状态。优势与不足:Select 模型优势在于可以同时对多个建立起来的套接字进行有序的管理。可以防止应用程序在一次 I/O 调用过程中,使阻塞 模式套接字被迫进入阻塞状态;使非阻塞套接字产生 WSAEWOULDBLOCK 错误。 select()函数就好像一个消息中心,当消息到来时,通知应用程序接收和发送数据。这使得 Windows Sockets 应用程 序开发人员可以把精力更多地集中在如何处理数据的发送和接收上。 我们可以看到,完成一次 I/O 操作经历了两次 Windows Sockets 函数的调用。例如,当接收对方数据时,第一步,调 用 select()函数等待该套接字的满足条件;第二步,调用 recv()函数接收数据。这种结果与在一个阻塞模式的套接字 上调用 recv()函数是一样的, 因此, 使用 select()函数的 Windows Sockets 程序, 其效率可能受损。 因为每一个 Windows Sockets I/O 调用都会经过该函数,因而会导致严重的 CPU 额外负担。 15、简述阻塞模式服务器和客户端工作流程,以及阻塞模式套接字的优势和不足。 使用阻塞模式的套接字开发网络程序比较简单,容易实现。当希望能够立即发送和接受数据,且处理的套接字数 量较少的情况下。使用阻塞套接字模式来开发网络程序比较合适。 而不足之处表现为,在大量建立好的套接字线程之间进行通讯时比较困难。当希望同时处理大量套接字时,将无 从下手,扩展性差。 16、在实际应用中,很多 TCP 服务器程序在非正常退出时,如果立即重启服务器进程则会发生绑定服务器端口失败的 错误,从而无法启动服务器进程,但等待一段时间后就可以了。为什么会发生这种情况呢?如何解决这个问题(或采取 什么措施可以立即重启服务器进程)?(要求掌握 setsockopt()函数的用法) 17、TCP 程序的工作模型隐含着通信标识五元组的建立过程。这五元组在 TCP 的客户与服务端是由哪些函数分别确定 的? 客户端:socket()函数确定通信协议, connect()函数确定远地地址和远地端口及本地地址, 服务端:socket()函数确定通信协议,bind()函数本地地址和本地端口,accept()函数确定远地地址和远 地端口。 18、accept( )为什么要返回一个套接口?或者说,为什么要为每一个连接创建一个套接口来处理?UDP 服务器端为什 么不需要多个套接口? 如果函数 accept()执行成功,则返回值是有内核自动生产的一个全新套接口描述符,代表与客户的 TCP 连接。对 该客户后续的所有操作,都使用这个新的套接口描述符,因此把它叫已连接套接口描述符,至于原来那个监听套接口, 它仍然用于监听其它客户发送的连接请求,而且仍处于监听模式,因此把它叫做监听套接口描述符,当有多个客户连 接过来时,一个监听套接口可以派生出多个已连接套接口。

19、理解生产者-消费者模型,理解线程的同步与互斥方法(event 和 critical-section),并能应用到程序设计中。 20、采用阻塞式 I/O 模型时,套接字函数 recv()的返回值有哪几种?分别对应什么情况? 21、closesocket()函数和 shutdown()函数有何差别? 1) 如果关闭 读,则接受缓冲区的未读出的所有数据都将丢失,以后不会再接受任何数据 2) 如果关闭 写,如果 输出缓冲区内有数据, 则所有的数据将发送出去后将发送一个 FIN 信号 而 close 则是关闭该 socket, 马上发送 FIN 信号,所有的未完成发送或者接受的数据都将被丢失 对于慢速网络,应该先进行 shutdown,然后一定的时间延迟, 再 close 该 socket. 22、什么是 TCP 的三次握手机制?为什么要使用 TCP 的三次握手机制? 含义:所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送 和接收同步,根据所接收 到的数据量而确定的数据确认数及数据发送、 接收完毕后何时撤 消联系, 并建立虚连接。 为了提供可靠的传送, TCP 在 发送新的数据之前,以特定的顺序 将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP 总是用来发送 大批量 的数据。当应用程序在收到数据后要做出确认时也要用到 TCP。 原因: 原因:在 TCP/IP 协议中,TCP 协议 提供可靠的连接服务,采用三次握手建立一个连接。三 次握手时在存在包丢失、重复和延迟的情况下,确保通信双方 信息交换确定性的充分必要 条件。1.请求端(通常称为客户)发送一个 SYN 段,指明客户打算连接的服务器的端口 以 及初始序号(SEQ)。这个 SYN 段为报文段 1。2.服务器发回包含服务器的初始序号的 SYN 报文段(报文段 2) 作为应答。同时,将确认序号设置为客户的 ISN 加 1,用以对客户的 SYN 报文段进行确认。一个 SYN 占用一个序号。 3.客户必须将确认序号设置为服务器的 ISN 加 1,用以对服务器的 SYN 报文段进行确认


更多相关文档:

网络程序设计复习题

网络程序设计复习题_其它课程_高中教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 网络程序设计复习题_其它课程_高中教育_教育专区。网络程序设计复习题...

网络编程试题-参考答案

网络编程试题-参考答案_IT认证_资格考试/认证_教育专区。华清远见嵌入式学院第二学期期中考试 华清远见嵌入式学院第二学期期中考试一、 选择题(10 题,每题 2 分...

网络程序设计方法复习题

网络程序设计方法复习题一、填空题 1 、 JAVA 语言中,编写数据报通信程序,需要使用 java.net package 中的两个类: ___ 和 ___ 。 2、HTTP 协议中,服务器...

网络编程试题答案

A: 配置域名服务器 B :定义一条本机指向所在网络的路由 C :定义一条本机...网络编程复习题 15页 免费 网络编程实例 5页 免费 网络编程 26页 免费 ...

《网络程序设计》题库

网络程序设计试题库 说明:本题库为张家界学院 09 级计算机专业学生《网络程序设计》课程的试题库,本 课程为考查课,采用的是任课教师自定的考查方案,考查...

网络程序设计课程设计考试题

网络程序设计课程设计考试题 隐藏>> 网络程序设计课程设计期末大作业一. 基本要求:(1) 熟练掌握计算机网络的概念和原理。 (2) 熟练掌握网络程序设计接口 SOCKET 编...

网络编程技术试题

网络编程技术试题_计算机软件及应用_IT/计算机_专业资料。河南理工大学考试资料 ...Java 是纯面向对象语言,程序设计的单元是类,程序运行的单元为对象 C++是混合型...

面向网络编程技术复习题

面向网络编程技术复习题_高等教育_教育专区。网络编程技术及应用一、 单项选择题...("URL")%> rs.MoveNext 五、设计题 1.利用 Recodset 对象也可以插入记录,...

网络程序设计期末复习题

网络程序设计期末复习题_工学_高等教育_教育专区。网络程序设计期末复习题第一章网络基础(1)计算机网络程序设计是利用网络应用编程接口编写网络应用程序,实现网络应用进...

网络程序设计复习题(带答案)

网络程序设计复习题(带答案)_理学_高等教育_教育专区。考试复习资料题网络程序设计复习题 1、为了实现网络的互联,互联网技术必须保证使用不同硬件结构的计算机能够进行...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com