收藏 分享(赏)

网络编程实用教程课后习题.doc

上传人:weiwoduzun 文档编号:3775781 上传时间:2018-11-18 格式:DOC 页数:17 大小:1.72MB
下载 相关 举报
网络编程实用教程课后习题.doc_第1页
第1页 / 共17页
网络编程实用教程课后习题.doc_第2页
第2页 / 共17页
网络编程实用教程课后习题.doc_第3页
第3页 / 共17页
网络编程实用教程课后习题.doc_第4页
第4页 / 共17页
网络编程实用教程课后习题.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、第一章 网络编程基础1. 什么是线程,什么是进程?答:进程是处于运行过程中的程序实例,是操作系统调度和分配资源的基本单位。 一个进程实体由程序代码、数据和进程控制块三部分构成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。2.描述网络应用程序的一般组成。为什么说应用层协议是在应用程序中实现的?答:从功能上,可以将网络应用程序分为两部分,一部分是专门负责网络通信的模块,它们与网络协议栈相连接,借助网络协议栈提供的服务完成网络上数据信息的交换。另一部分是面向用户或者作其他处

2、理的模块,它们接收用户的命令,或者对借助网络传输过来的数据进行加工,这两部分模块相互配合,来实现网络应用程序的功能。 2. 实现网间进程通信必须解决哪些问题?答:(1)网间进程的标识问题;(2)如何与网络协议栈连接的问题;(3)协议的识别问题;(4)不同的通信服务的问题4.说明 TCP/IP 中,端口的概念和端口的分配机制。答:端口是 TCP/IP 协议族中,应用层进程与传输层协议实体间的通信接口。TCP/IP 协议采用了全局分配(静态分配)和本地分配(动态分配)相结合的分配方法。对于 TCP,或者 UDP,将它们的全部 65535 个端口号分为保留端口号和自由端口号两部分。保留端口的范围是

3、01023,又称为众所周知的端口或熟知端口(well-known port) ,其余的端口号,1024-65535,称为自由端口号,采用本地分配,又称为动态分配的方法。总之,TCP 或 UDP 端口的分配规则是:端口 0:不使用,或者作为特殊的使用;端口 1-255:保留给特定的服务,TCP 和 UDP 均规定,小于256 的端口号才能分配给网上著名的服务;端口 256-1023:保留给其他的服务,如路由;端口 1024-4999:可以用作任意客户的端口;端口 5000-65535:可以用作用户的服务器端口。 5.什么是网络应用进程的网络地址?说明三元组和五元组的概念。答:应用层进程地址=(传

4、输层协议,主机的 IP 地址,传输层的端口号) ,它标识了因特网中,进程间通信的一个端点,也把它称为进程的网络地址。 (传输层协议,主机的 IP 地址,传输层的端口号) ,这样一个三元组,叫做一个半相关(half-association) 。(传输层协议,本地机 IP 地址,本地机传输层端口,远地机 IP 地址,远地机传输层端口),五元组称为一个全相关(association) 。即两个协议相同的半相关才能组合成一个合适的全相关,或完全指定一对网间通信的进程。6.举例说明面向消息的协议与基于流动协议有什么不同。答:例如甲向乙发送三个消息,分别是:128、64 和 32 字节。面向消息的协议中,

5、如果接受缓冲区是 256 字节,足以接收 3 条消息,且这三条消息全部达到。乙仍然需要发送 3 条读取消息。分别返回 128、64、32 字节,而不用一次读取来调用者单个数据包。基于流的消息协议中,在接收端乙的堆栈把所有进来的消息数据包聚集在一起,放入堆栈,等待应用进程读取。进程发送读取命令,指定了进程接收缓冲区,如果进程缓冲区有 256 字节,系统马上返回全部 224 字节。7.TCP 提供的服务有哪些特征?答:应用层进程提供一个面向连接的、端到端的、完全可靠的(无差错、无丢失、无重复或失序)全双工的流传输服务。 允许网络中的两个应用程序建立一个虚拟的链接,在任何一个方向上发送数据,把数据当

6、作一个双向字节流进行交换,最后终止连接。8.简要说明三类网络编程。答:基于 WWW 应用的网络编程技术,包括所见即所得的网页制作工具,和动态服务器页面的制作技术。 .NET 平台有四组产品 开发工具 专用服务器 Web 服务。 设备。MS.NET 顺应了软件工业的趋势,包括 4 个方面: 分布式计算 组件化 企业级别的服务 WEB 范型转移。.NET 平台由三层软件构成 顶层是全新的开发工具 VS.NET, 中间层包括三部分:.NET 服务器、.NET 服务构件和.NET 框架。 底层是 WINDOWS 操作系统。Web 服务是松散耦合的可复用的软件模块,在 Internet 上发布后,能通过

7、标准的 Internet 协议在程序中访问,具有以下的特点:(1)可复用(2)松散耦合(3)封装了离散(4)Web 服务可以在程序中访问(5)Web 服务在 Internet 上发布 9说明 C/S 模式的概念、工作过程和特点。答:C/S 模式即客户机/服务器模式,是应用程序最常用的通信模式。服务器的工作过程是:(1)打开一通信通道,并告知服务器所在的主机,它愿意在某一公认的地址上接收客户请求。 (2)等待客户的请求到达该端口。 (3)服务器接收到服务请求,处理该请求并发送应答信号。为了能并发地接收多个客户的服务请求,要激活一个新进程或新线程来处理这个客户请求(如 UNIX 系统中用 fork

8、、exec) 。服务完成后,关闭此新进程与客户的通信链路,并终止。 (4)返回第二步,等待并处理另一客户请求。 (5)在特定的情况下,关闭服务器。 客户方工作过程:(1)打开一通信通道,并连接到服务器所在主机的特定监听端口。 (2)向服务器发送请求报文,等待并接收应答;继续提出请求,与服务器的会话按照应用协议进行。 (3)请求结束后,关闭通信通道并终止。特点:(1)客户和服务器都是软件进程,C/S 模式是网络上通过进程通信建立分布式应用的常用模型。(2)非对称性:服务器通过网络提供服务,客户通过网络使用服务,这种不对称性体现在软件结构和工作过程上。 (3)对等性:客户和服务器必有一套共识的约定

9、,必与以某种应用层协议相联,并且协议必须在通信的两端实现。 (4)服务器的被动性:服务器必须先行启动,时刻监听,及时服务,只要有客户请求,就立即处理并响应,回传信息。但决不主动提供服务。 (5)客户机的主动性:客户机可以随时提出请求,通过网络得到服务,也可以关机走人,一次请求与服务的过程是由客户机首先激发的。(6)一对多:一个服务器可以为多个客户机服务,客户机也可以打开多个窗口,连接多个服务器。(7)分布性与共享性:资源在服务器端组织与存储,通过网络分散在多个客户端使用。10.说明用户和客户机,服务器和服务器类计算机的区别。答:“客户”(client)和服务器都指的是应用进程,即计算机软件。“

10、用户”(user)指的是使用计算机的人。 服务器(server)这个术语来指那些运行着的服务程序。服务器类计算机(server-class computer)这一术语来称呼那些运行服务器软件的强大的计算机。第二章 UNIX 套接字编程接口2.实现套接字编程接口的两种方式是什么?答:一种是在操作系统的内核中增加相应的软件来实现,一种是通过开发操作系统之外的函数库来实现。 4.什么是套接字?答:是应用程序通过网络协议栈进行通信交互的接口。5.说明套接字特点。答:(1)通信域。套接字通常只和同一域中的套接字交换数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。 (2)套接字有三种类型,流式

11、、数据包和原始套接字。 (3)套接字由应用层创建,并为其服务,而后被释放。 (4)使用确定的 IP 地址和传输层端口号。6.说明套接字应用场合。答:(1)不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。 (2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。 7.说明本机字节顺序和网络字节顺序的概念。答:在具体计算机中的多字节数据的存储顺序,称为本机字节顺序。多字节数据在网络协议报头中的存储顺序,称为网络字节顺序。 8.流式套接口的工作过程9.什么是阻塞问题?如何对应?答

12、:阻塞是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。利用UNIX 操作系统的 FORK()系统调用,编制多进程并发执行的服务器程序。第三章 Windows 环境的网络编程1.试述 WinSock 1.1 的特点。答:(1)WinSock 1.1 全面继承了 Berkeley Sockets 规范(2)数据库函数。其中六个采用 getXbyY()的形式,大多要借助网络上的数据库来获得信息, (3)WinSock 1.1 扩充了 Berkeley Sockets 规范(4)WinSo

13、ck 1.1 只支持 TCP/IP 协议栈 2.WinSock 规范与 Berkeley 套接口的区别是什么?答:a.套接口数据类型和该类型的错误返回值b.select()函数和 FD_*宏。在 Winsock 中,使用 select()函数时,应用程序应坚持用 FD_XXX 宏来设置,初始化,清除和检查 fd_set 结构。 c.错误代码的获得 在 Winsock 中,错误代码可以使用 WSAGetLastError()调用得到。d.指针所有应用程序与 Windows Sockets 使用的指针都必须是 FAR 指针。e.重命名的函数。 (1)close()改变为 closesocket()

14、(2)ioctl()改变为 ioctlsocket() f.Winsock 支持的最大套接口数目 在 WINSOCK.H 中缺省值是 64,在编译时由常量 FD_SETSIZE 决定。g.头文件 Berkeley 头文件被包含在 WINSOCK.H 中。一个 Windows Sockets 应用程序只需简单地包含WINSOCK.H 就足够了。h. Winsock 规范对于原始套接口的支持.i.Winsock 规范对于原始套接口和消息驱动机制的支持。体现在异步选择机制、异步请求函数、阻塞处理方法、错误处理、启动和终止等方面。 3.WinSock 的注册和注销过程答:注册过程:调用 WSAStar

15、tup 的格式:int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); wVersionRequested:指定要使用的 WinSock 的最高版本号, lpWSAData 用来返回WinSockAPI 实现细节的 WSAData 结构变量指针。注销过程:应用程序必须调用 WSACleanup()函数,来解除与 Winsock.DLL 库的绑定,释放 Winsock 实现分配给应用程序的系统资源,中止对 Windows Sockets DLL 的使用。 int WSACleanup ( void ); 4.说明 WSASta

16、rtup 函数初始化过程。(1)查找 WinSock.DLL 文件,如果有 WinSock 实现,则调入相关信息。若无,则初始化失败。返回错误信息。 (2) 。确认版本号。 (3)建立 WinSock 同应用程序的联系。 (4)函数创建成功,在 WSAData 结构中返回许多信息,否则,通知用户“初始化失败” 。5.画框图说明同步套接字的 send 函数的初始化过程。: 第四章1.为什么说 MFC 是一个编程框架?它提供了哪些相应的工具?MFC 应用程序框架,简称 MFC 框架,是由 MFC(Microsoft Foundation Class Library)中的各种类结合起来构成的。MFC

17、 框架从总体上定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员只须通过预定义的接口把具体应用程序特有的东西填入这个轮廓,就能建立 Windows 下的应用程序。Microsoft Visual C+提供了相应的工具来完成这个工作:用应用程序向导(AppWizard)可以生成应用程序的骨架文件(代码和资源等) ;用资源编辑器可以直观地设计用户接口;用类向导(ClassWizard)可以将代码添加到骨架文件;用编译器可以通过类库实现应用程序特定的逻辑。MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。 2.MFC 类库封装了哪些内容?1)对 Wi

18、n32 应用程序编程接口的封装 2)对应用程序概念的封装 3)对 COM/OLE 特性的封装 4)对 ODBC 功能的封装 3.典型的 MDI 应用程序 AppWizard 会自动创建一系列文件,如果工程的名字是 My,这些文件的名字是什么?头文件 My.h,实现文件 My.cpp,资源文件 My.rc 和模块定义文件 My.def4.说明构成应用程序的对象之间的关系。这里,用图的形式可直观地表示所涉及的 MFC 类的继承或者派生关系,如图 4.2 所示意。 图 4.2 构成 MDI 应用程序的各对象之间的派生关系 5.说明 MFC 对象和 Windows 对象的关系。所谓 Windows 对

19、象是 Win32 下用句柄表示的 Windows 操作系统对象;所谓 MFC 对象是 C+对象,是一个C+类的实例。两者有很大的区别,但联系紧密。以窗口对象为例: 图 4.3 MFC 的 CWnd 类窗口对象和 Windows 的窗口对象的关系 6.说明 MFC 对象和 Windows 对象的区别。(1)对应的数据结构不同(2)所处的层次不同(3)创建的机制不同(4)二者转换的方式不同(5)使用的范围不同(6)销毁的方法不同7.CObject 类具有哪些特性?CObject 类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。8.说明应用程序、文档模

20、板、边框窗口、视图和文档等的创建关系。P121答:应用程序是全局对象,在启动程序之前构造;应用程序创建文档模板;文档模板创建文档和边框窗口;边框窗口创建试图。9.说明 WinMain 入口函数的流程。P12310.消息循环的过程是什么?P12411.应用程序的退出过程是什么?下面以单击主窗口的关闭按钮为例,来说明应用程序退出的过程。1)用户单击主窗口的关闭按钮,导致发送 MFC 标准命令消息 ID_APP_EXIT。MFC 调用CwinApp:OnAppExit()来完成对该命令消息的缺省处理,主要是向主窗口发送 WM_CLOSE 消息。2)主窗口处理 WM_CLOSE 消息。3)收到 WM_

21、QUIT 消息后,退出消息循环,进而退出整个应用程序。第五章一、MFC 提供的两个套接字类是什么?答:CAsyncSocket 类,CSocket 类。二、为什么说 CAsyncSocket 类是在很低的层次上对 Windows Sockets API 进行了封装?答:它的成员函数和 Windows Sockets API 的函数调用直接对应。一个 CAsyncSocket 对象代表了一个Windows 套接字。它是网络通信的端点。除了把套接字封装成 C+的面向对象的形式供程序员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的 Windows 消息变为 CAsyncSocket 类的回

22、调函数。 三、为什么说 Csocket 类是对 Windows Sockets API 的高级封装?答:CSocket 类继承了 CAsyncSocket 类的许多成员函数,用法一致。CSocket 类的高级表现在三个方面:(1)CSocket 结合 archive 类来使用套接字。(2)CSocket 管理了通信的许多方面,如字节顺序问题和字符串转换问题。(3)CSocket 类为 Windows 消息的后台处理提供了阻塞的工作模式。 四、使用 CAsyncSocket 类的一般步骤是什么?答:序号 服务器(Server) 客户机(Client)1 /构建一个套接字CAsyncSocket

23、sockSrvr; /构建一个套接字CAsyncSocket sockClient;2 /创建 SOCKET 句柄,绑定到指定的端口sockSrvr.Create(nPort);/创建 SOCKET 句柄,使用默认参数sockClient.Create();3 /启动监听,时刻准备接受连接请求sockSrvr.Listen();4 /请求连接到服务器sockClient.Connect(strAddr,nport);5 /构造一个新的空的套接字 CasyncSocket sockRecv;/接收连接 sockSrvr.Accept(sockRecv);6 /接收数据sockSrvr.Recei

24、ve(pBuf,nLen);/发送数据sockClient.Send(pBuf,nLen);7 /发送数据sockSrvr.Send(pBuf,nLen);/接收数据sockClient.Receive(pBuf,nLen);8 /关闭套接字对象sockSrvr.Close();/关闭套接字对象sockClient.Close();五、CAsyncSocket 类可以接受并处理哪些消息事件?当这些网络事件发生时,MFC 框架作何处理?答:MFC 套接字对象可以接受并处理的六种网络事件:(1)FD_READ 事件通知:通知有数据可读。(2)FD_WRITE 事件通知:通知可以写数据。(3)FD_

25、ACCEPT 事件通知:通知监听套接字有连接请求可以接受。(4)FD_CONNECT 事件通知:通知请求连接的套接字,连接的要求已被处理。(5)FD_CLOSE 事件通知:通知套接字已关闭。(6)FD_OOB 事件通知:通知将有带外数据到达处理:按照 Windows 的消息驱动机制,MFC 框架应当把消息发送给相应的套接字对象,并调用作为该对象成员函数的事件处理函数。事件与处理函数是一一映射的。 在 afxSock.h 文件中的 CAsyncSocket 类的声明中,定义了与这六个网络事件对应的事件处理函数。virtual void OnReceive(int nErrorCode); 对应

26、FD_READ 事件virtual void OnSend(int nErrorCode); 对应 FD_WRITE 事件virtual void OnAccept(int nErrorCode); 对应 FD_ACCEPT 事件virtual void OnConnect(int nErrorCode); 对应 FD_CONNECT 事件virtual void OnClose(int nErrorCode); 对应 FD_CLOSE 事件virtual void OnOutOfBandData(int nErrorCode); 对应 FD_OOB 事件 六、CSocket 类如何通过 Ca

27、rchive 对象来进行数据传输?答:使用 CArchive 对象和套接字一起进行数据传输工作,必须使用流式套接字七、说明 CSocket 类的编程模型。答:下面给出针对流式套接字的 CSocket 类的编程模型1服务器端(1)CSocket sockServ; / 创建空的服务器端监听套接字对象。/ 用众所周知的端口,创建监听套接字对象的底层套接字句柄。(2)sockServ.Create( nPort ); (3)sockServ.Listen(); / 启动对于客户端连接请求的监听。(4)CSocket sockRecv; / 创建空的服务器端连接套接字对象。 sockServ.Acce

28、pt( sockRecv); / 接收客户端的连接请求,并将其他的任务转交给连接套接字对象。(5)CSockFile* file ;file = new CSockFile( /创建文件对象并关联到连接套接字对象。(6)CArchive* arIn, arOut;arIn = CArchive( / 创建用于输入的归档对象,arOut = CArchive( / 创建用于输出的归档对象。/ 归档对象必须关联到文件对象。(7)arIn dwValue; / 进行数据输入。adOut dwValue; / 进行数据输入。adOut 至字符),这部分字符是可打印的,则该数据字节编码为 7bit 的对

29、应 ASCII 字符,实际就是将最高位去掉。 (2)其他的数据,包括“=”字符,空格,ASCII 码在 0-32 的不可打印字符,以及非 ASCII 码的数据,都必须进行编码。被编码的数据以 8bit 的字节为单位,先将每个字节的二进制代码用两个 16 进制数字表示,然后在前面加上一个等号“=” ,就是该字节的编码。(3)如果要将编码后的数据分割成 76 字符的行,可以在分割处插入等号“=”和 CRLF。此等号也要计算在 76 个字符中。11、简述 POP3 会话的 3 个状态。答:POP3 会话一共有 3 个状态:验证状态,事务状态和更新状态。每个状态都是会话过程中的特定阶段。当连接服务器后

30、,POP3 会话首先进入验证状态,在这个阶段里,可以使用 USER Pass Quit 这三个POP3 命令,客户段送交用户名和口令,服务器验证是否合法。 通过服务器验证后,服务器锁定该用户的信箱,从而防止多个 POP 客户端同时对此邮箱进行邮件操作,比如删除,取信等。但是可以让新的邮件加入。这时会话过程转变为事务状态,在事务状态客户端可用的 POP3 命令有:Noop Stat Quit List Retr Top Dele Rset Uidl。使用这些命令进行各种邮件操作,POP 对话的大部分时间都处在事务状态中。 当客户发出 Quit 命令后,结束事务状态,POP 会话过程进入更新状态。

31、在事务状态进行的一些操作,最终在更新状态中才得以体现。比如在事务状态使用 Dele 命令删除邮件,实际服务器并没有将邮件删除,只是做了一个删除标志;到了会话过程的更新状态,邮件才被删除。更新状态只是会话中的一个过程,该状态没有可使用的命令,目的是用户在事务状态后用以确认已经进行的操作。在进入该状态后,紧接着就完成了 POP3 的会话过程,断开了与服务器的连接。要注意,由于异常原因导致的与服务器终止对话并没有进入更新状态。在事务状态删除的邮件没有被删除,下次进入信箱时邮件还是存在的。 12、接收电子邮件编程的一般步骤是什么。答:首先利用 Winsock 连接上 POP3 服务器,然后:1使用 USER 命令发送用户信箱名。2使用 PASS 命令发送信箱密码。如果密码和信箱不匹配,必须从上一步骤重新开始。3对信箱邮件进行操作。此阶段称为事务状态,在这一个阶段,有许多 POP3 命令可以使用,大体分为下面几类:(1)取得信箱及邮件状态的命令Stat:取得信箱大小信息List:取得邮件大小信息Uidl:取得邮件的唯一标识符。 (2)取得邮件内容的命令Retr:从服务器取回邮件TOP: 取邮件信头和信体的前 N 行。(3)对邮件进行操作的命令Dele:为邮件做删除标记。Rset:复位 POP 会话。4接收邮件完毕,发送 QUIT 命令,结束 POP3 对话。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报