2022年网络编程实用教程课后习题 2.pdf

上传人:H****o 文档编号:33396934 上传时间:2022-08-10 格式:PDF 页数:16 大小:860.49KB
返回 下载 相关 举报
2022年网络编程实用教程课后习题 2.pdf_第1页
第1页 / 共16页
2022年网络编程实用教程课后习题 2.pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年网络编程实用教程课后习题 2.pdf》由会员分享,可在线阅读,更多相关《2022年网络编程实用教程课后习题 2.pdf(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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. 举例说明面向消息的协议与基于流动协议有什么不同。答:例

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

6、两个应用程序建立一个虚拟的链接,在任何一个方向上发送数据,把数据当作一个双向字节流进行交换,最后终止连接。8. 简要说明三类网络编程。答:基于 WWW应用的网络编程技术, 包括所见即所得的网页制作工具,和动态服务器页面的制作技术。.NET 平台有四组产品 开发工具 专用服务器 Web 服务。 设备。 MS.NET顺应了软件工业的趋势,包括 4 个方面: 分布式计算组件化企业级别的服务 WEB 范型转移。 .NET平台由三层名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 1

7、6 页 - - - - - - - - - 软件构成顶层是全新的开发工具VS.NET , 中间层包括三部分: .NET服务器、.NET服务构件和 .NET框架。 底层是 WINDOWS操作系统。 Web 服务是松散耦合的可复用的软件模块,在Internet上发布后,能通过标准的Internet 协议在程序中访问,具有以下的特点: (1)可复用( 2)松散耦合( 3)封装了离散(4)Web服务可以在程序中访问( 5)Web 服务在 Internet上发布9说明 C/S模式的概念、工作过程和特点。答:C/S 模式即客户机 / 服务器模式,是应用程序最常用的通信模式。服务器的工作过程是:(1)打开一

8、通信通道,并告知服务器所在的主机,它愿意在某一公认的地址上接收客户请求。(2)等待客户的请求到达该端口。 (3)服务器接收到服务请求,处理该请求并发送应答信号。为了能并发地接收多个客户的服务请求,要激活一个新进程或新线程来处理这个客户请求(如 UNIX系统中用 fork 、exec) 。服务完成后,关闭此新进程与客户的通信链路,并终止。(4)返回第二步,等待并处理另一客户请求。 (5)在特定的情况下,关闭服务器。客户方工作过程:(1)打开一通信通道,并连接到服务器所在主机的特定监听端口。(2)向服务器发送请求报文,等待并接收应答;继续提出请求,与服务器的会话按照应用协议进行。(3)请求结束后,

9、关闭通信通道并终止。特点: (1)客户和服务器都是软件进程,C/S 模式是网络上通过进程通信建立分布式应用的常用模型。(2)非对称性:服务器通过网络提供服务,客户通过网络使用服务,这种不对称性体现在软件结构和工作过程上。(3)对等性:客户和服务器必有一套共识的约定,必与以某种应用层协议相联,并且协议必须在通信的两端实现。 (4)服务器的被动性:服务器必须先行启动,时刻监听,及时服务,只要有客户请求,就立即处理并响应,回传信息。但决不主动提供服务。(5)客户机的主动性:客户机可以随时提出请求,通过网络得到服务,也可以关机走人,一次请求与服务的过程是由客户机首先激发的。(6)一对多:一个服务器可以

10、为多个客户机服务,客户机也可以打开多个窗口,连接多个服务器。(7)分布性与共享性:资源在服务器端组织与存储,通过网络分散在多个客户端使用。10. 说明用户和客户机,服务器和服务器类计算机的区别。答: “客户” (client)和服务器都指的是应用进程,即计算机软件。“用户” (user) 指的是使用计算机的人。服务器( server )这个术语来指那些运行着的服务程序。服务器类计算机( server-class computer)这一术语来称呼那些运行服务器软件的强大的计算机。第二章 UNIX 套接字编程接口2. 实现套接字编程接口的两种方式是什么?答: 一种是在操作系统的内核中增加相应的软件

11、来实现,一种是通过开发操作系统之外的函数库来实现。4. 什么是套接字?答:是应用程序通过网络协议栈进行通信交互的接口。5. 说明套接字特点。答: (1)通信域。套接字通常只和同一域中的套接字交换数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。 (2)套接字有三种类型,流式、数据包和原始套接字。(3)套接字由应用层创建,并为其服务,而后被释放。 (4)使用确定的 IP 地址和传输层端口号。6. 说明套接字应用场合。答: (1)不管是采用对等模式或者客户机/ 服务器模式,通信双方的应用程序都需要开发。(2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚

12、至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。7. 说明本机字节顺序和网络字节顺序的概念。答:在具体计算机中的多字节数据的存储顺序,称为本机字节顺序。多字节数据在网络协议报头中的存储顺序,称为网络字节顺序。8. 流式套接口的工作过程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 9. 什么是阻塞问题?如何对应?答: 阻塞是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调

13、用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。利用UNIX操作系统的 FORK() 系统调用,编制多进程并发执行的服务器程序。第三章 Windows 环境的网络编程1. 试述 WinSock 1.1 的特点。答: (1)WinSock 1.1 全面继承了 Berkeley Sockets规范(2)数据库函数。其中六个采用getXbyY() 的形式,大多要借助网络上的数据库来获得信息,(3)WinSock 1.1 扩充了 Berkeley Sockets规范(4)WinSock 1.1 只支持 TCP/IP 协议栈2.WinSock 规范与 Berkeley 套接口

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

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

16、A lpWSAData ); wVersionRequested:指定要使用的WinSock 的最高版本号, lpWSAData 用来返回WinSockAPI实现细节的 WSAData 结构变量指针。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 注销过程:应用程序必须调用WSACleanup() 函数,来解除与 Winsock.DLL 库的绑定,释放 Winsock 实现分配给应用程序的系统资源,中止对Windows Soc

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

18、soft Foundation Class Library)中的各种类结合起来构成的。 MFC框架从总体上定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员只须通过预定义的接口把具体应用程序特有的东西填入这个轮廓,就能建立Windows下的应用程序。 Microsoft Visual C+提供了相应的工具来完成这个工作:用应用程序向导(AppWizard)可以生成应用程序的骨架文件 (代码和资源等); 用资源编辑器可以直观地设计用户接口;用类向导(ClassWizard )可以将代码添加到骨架文件;用编译器可以通过类库实现应用程序特定的逻辑。MFC实现了对应用程序概念的封装,把类、类

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

20、说明 MFC 对象和 Windows对象的关系。所谓 Windows对象是 Win32下用句柄表示的Windows操作系统对象;所谓MFC 对象是 C+ 对象,是一个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - C+ 类的实例。两者有很大的区别,但联系紧密。以窗口对象为例:图 4.3 MFC 的 CWnd 类窗口对象和 Windows的窗口对象的关系6. 说明 MFC 对象和 Windows对象的区别。(1)对应的数据结构不

21、同(2)所处的层次不同(3)创建的机制不同(4)二者转换的方式不同(5)使用的范围不同(6)销毁的方法不同7.CObject 类具有哪些特性?CObject 类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。8. 说明应用程序、文档模板、边框窗口、视图和文档等的创建关系。P121 答:应用程序是全局对象,在启动程序之前构造;应用程序创建文档模板;文档模板创建文档和边框窗口;边框窗口创建试图。9. 说明 WinMain入口函数的流程。 P123 10. 消息循环的过程是什么? P124 11. 应用程序的退出过程是什么?下面以单击主窗口的关闭按钮为例

22、,来说明应用程序退出的过程。1)用户单击主窗口的关闭按钮,导致发送MFC标准命令消息ID_APP_EXIT 。MFC调用 CwinApp : :OnAppExit() 来完成对该命令消息的缺省处理,主要是向主窗口发送WM_CLOSE消息。2)主窗口处理 WM_CLOSE消息。3)收到 WM_QUIT 消息后,退出消息循环,进而退出整个应用程序。第五章一、MFC 提供的两个套接字类是什么?答:CAsyncSocket 类,CSocket 类。二、为什么说 CAsyncSocket类是在很低的层次上对Windows Sockets API 进行了封装?答:它的成员函数和Windows Socket

23、s API的函数调用直接对应。一个CAsyncSocket 对象代表了一个Windows套接字。它是网络通信的端点。除了把套接字封装成C+ 的面向对象的形式供程序员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的Windows消息变为 CAsyncSocket类的回调函数。三、为什么说 Csocket 类是对 Windows Sockets API 的高级封装?答:CSocket 类继承了 CAsyncSocket 类的许多成员函数, 用法一致。CSocket 类的高级表现在三个方面:(1)CSocket 结合 archive类来使用套接字。(2)CSocket 管理了通信的许多方面,

24、如字节顺序问题和字符串转换问题。(3)CSocket 类为 Windows消息的后台处理提供了阻塞的工作模式。四、使用 CAsyncSocket类的一般步骤是什么?答:序号服务器( Server )客户机( Client )1 / 构建一个套接字CAsyncSocket sockSrvr; / 构建一个套接字CAsyncSocket sockClient; 2 / 创建 SOCKET 句柄,绑定到指定的端口/ 创建 SOCKET 句柄,使用默认参数sockClient.Create(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -

25、- - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - sockSrvr.Create(nPort); 3 / 启动监听,时刻准备接受连接请求sockSrvr.Listen(); 4 / 请求连接到服务器sockClient.Connect(strAddr,nport); 5 / 构造一个新的空的套接字CasyncSocket sockRecv; /接收连接sockSrvr.Accept(sockRecv); 6 / 接收数据sockSrvr.Receive(pBuf,nLen); / 发送数据sockClient.Send(pBuf,n

26、Len); 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_ACCEPT事件通知:通知监听套接字有连接请求可以接受。(4)F

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

28、rorCode); 对应 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 类如何通过 Carchive 对象来进行数据传输?答:使用 CArchive 对象和套接字一起进行

29、数据传输工作,必须使用流式套接字七、说明 CSocket 类的编程模型。答:下面给出针对流式套接字的CSocket 类的编程模型1服务器端(1)CSocket sockServ; / 创建空的服务器端监听套接字对象。/ 用众所周知的端口,创建监听套接字对象的底层套接字句柄。(2)sockServ.Create( nPort ); (3)sockServ.Listen(); / 启动对于客户端连接请求的监听。(4)CSocket sockRecv; / 创建空的服务器端连接套接字对象。sockServ.Accept( sockRecv); / 接收客户端的连接请求,并将其他的任务转交给连接套接字

30、对象。(5)CSockFile* file ; file = new CSockFile( &sockRecv); /创建文件对象并关联到连接套接字对象。(6)CArchive* arIn, arOut; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - arIn = CArchive(&file, CArchive:load); / 创建用于输入的归档对象,arOut = CArchive( &file, CArchive:s

31、tore); / 创建用于输出的归档对象。/ 归档对象必须关联到文件对象。(7)arIn dwValue; / 进行数据输入。adOut dwValue; / 进行数据输入。adOut dwValue; / 进行数据输出。输入或输出可以反复进行。(7)sockClient.Close(); / 传输完毕,关闭套接字对象。八、说明使用 MFCAppWizard 创建客户机端应用程序框架具体的步骤?答:1使用 MFC AppWizard创建客户端应用程序框架。创建的程序是一个基于对话框的Win32应用程序,将自动创建两个类,应用程序类CTalkcApp,对应的文件是 talkc.h和 talkc.

32、cpp;对话框类 CTalkcDlg ,对应的文件是 talkcDlg.h和 talkcDlg.cpp。支持Windows Socket ,使用共享的 DLL实现 MFC42.DLL 。2为对话框界面添加控件对象利用控件面板在程序的主对话框界面中添加相应的可视控件对象,然后修改控件的属性3为对话框中的控件对象定义相应的成员变量4创建从 CAsyncSocket类继承的派生类(1)选择菜单“插入 / 新建类” ,进入“ New Class”对话,选择或输入以下信息:Class Type :选择 MFC Class Class Infoumation下的 Name: 输入 CMySocket Cl

33、ass Infoumation下的 Base class :选择 CAsyncSocket 点击“OK ”按钮,系统会自动生成CMySocket类对应的包含文件MySocket.h 和 MySocket.cpp 文件,在VC界面的 Class View 中就可以看到这个类。(2)利用类向导ClassWizard 为这个套接字类添加响应消息的事件处理成员函数,此程序中需要添加OnConnect ,OnClose和 OnReceive 三个函数。(3)为套接字类CMySocket类添加一般的成员函数和成员变量。对这个套接字类,添加一个私有的成员变量,是一个对话框类的指针。private:CTalk

34、cDlg * m_pDlg; 再添加一个成员函数:void SetParent(CTalkcDlg * pDlg); (4)手工添加其他代码对于 MySocket.h ,应在文件开头,添加对于此应用程序对话框类的声明:class CTalkcDlg; 对于 MySocket.cpp ,有四处添加: 应在文件开头,添加包含文件说明。这是因为此套接字类用到了对话框类的变量。#include “TalkcDlg.h ” 在构造函数中,添加对于对话框指针成员变量的初始化代码:CMySocket : :CMySocket() m_pDlg = NULL; 在析构函数中,添加对于对话框指针成员变量的初始化

35、代码:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - CMySocket : :CMySocket() m_pDlg = NULL; 为成员函数 setParent和事件处理函数 OnConnect ,OnClose和 OnReceive添加代码。5为对话框类添加控件对象事件的响应函数6为 CTalkcDlg 对话框类添加其它的成员函数和成员变量成员变量: CMySocket m_sConnectSocket; /用来与服务器

36、端连接的套接字。成员函数: void OnClose(); void OnConnect(); void OnReceive(); 7手工添加的代码在 CTalkcDlg 对话框类的talkcDlg.h中添加对于 MySocket.h 的包含命令,来获得对于套接字支持:#include “MySocket.h”在 CTalkcDlg 对话框类的 talkcDlg.cpp中添加对于控件变量的初始化代码:/ TODO: Add extra initialization here / 用户添加的控件变量的初始化代码BOOL CTalkcDlg:OnInitDialog() m_strServName

37、=localhost; / 服务器名 = localhost m_nServPort=1000; / 服务端口 = 1000 UpdateData(FALSE); / 更新用户界面/ 设置套接字类的对话框指针成员变量m_sConnectSocket.SetParent(this); 8添加事件函数和成员函数的代码主要在 CTalkcDlg 对话框类的 talkcDlg.cpp中和 CMySocket类的 Mysocket.cpp 中,添加用户自己的事件函数和成员函数的代码。9进行测试。九、说明点对点交谈的客户机端程序的类与消息驱动关系?答: 下图说明了点对点交谈的客户端程序的类与消息驱动关系第

38、六章1. 说明了各种 HINTERNET 句柄形成的树形体系答:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 2. 如何获取 WinInet API函数执行的错误信息?答:从函数的返回值来说, WinInet API 主要有两种类型。一种函数的返回值类型是HINTERNET 句柄型,一种函数的返回值类型是布尔型。应用程序可以根据函数执行后的返回值来判断函数的执行是否成功。对于前一种函数,当函数执行成功时,会返回一个有效的句柄

39、;当函数失败时,则返回NULL 。对于后一种函数,当函数执行成功时,返回TRUE ;当函数失败时,返回FALSE 。在函数调用失败后,用户往往需要了解出错的具体原因,应用程序可以随即调用GetLastError函数来获取更具体的错误信息。3、说明使用 WinInet API编制 FTP客户机端应用程序的一般步骤答: (1)调用 InternetAttemptConnect函数测试主机与Internet的连接状态,(2)调用 InternetOpen函数,创建 HINTERNET 会话根句柄。(3)创建 FTP会话句柄4、MFC WinInet 所包含的类有哪些?答:1、CInternetSes

40、sion类,2连接类,包括 CInternetConnection类和它的派生类 CFtpConnection类、CHttpConnection 类、和 CGopherConnection 类;3 文件类,首先包括CInternetFile类和由它派生的 CHttpFile类和 CGopherFile 类,另外,由CFileFind类派生的用于文件查找的CFtpFileFind类和 CGopherFileFind 类也应归入文件类的层次。4CInternetException类5、MFC WinInet 各种类之间的关系答:如下图,其中细线箭头从基类指向继承类,表示了类的派生关系;粗线箭头从函

41、数指向它所创建的类对象6、使用 WinInet 类编程的一般步骤是什么?答:1)创建 CInternetSession类对象,创建并初始化Internet会话。(2)利用 CInternetSession类的 QueryOption 或 SetOption 成员函数,可以查询或设置该类内含的Internet请求选项,这一步是可选。(3)创建连接类对象,建立CInternetSession对象与网络服务器的连接,也就是应用程序与网络服务器的连接。(4)创建文件检索类对象,对服务器进行检索(5)如果需要使用异步操作模式,可以重载CInternetSession类的 OnStatusCallback

42、函数,并启动应用程序使用状态回调机制。重载相关函数,加入自己的代码。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - (6)如果还想更紧密地控制对于服务器文件的访问,可以进一步创建文件类对象实例,完成文件查找或文件读写操作。(7)创建 CInternetException类对象实例,处理错误。(8)关闭各种类,将资源释放给系统。第七章1、 WinSock的两种 I/O 模式是什么?各有什么优缺点,缺点如何解决?答:WinSock

43、的两种 I/O 模式是: “阻塞”模式( Blocking Mode )或“非阻塞”模式,又称为同步模式或异步模式。阻塞模式的优点:阻塞套接字的I/O 操作工作情况比较确定,无非是调用、等待、返回。大部分情况下,I/O 操作都能成功地完成,不过就是花费了等待的时间。因而比较容易使用,容易编程。缺点:在应付诸如需要建立多个套接字连接来为多个客户服务的时候,或在数据的收发量不均匀的时候,或在输入输出的时间不确定的时候,却显得性能低下,甚至无能为力。非阻塞模式的优点:能应付诸如需要建立多个套接字连接来为多个客户服务,可以处理数据的收发量不均匀、输入输出的时间不确定等问题。非阻塞模式的缺点: 用非阻塞

44、套接字, 需要编写更多的代码, 因为必须恰当地把握调用I/O 函数的时机,尽量减少无功而返的调用,还必须详加分析每个Winsock 调用中收到的 WSAEWOULDBLOCK错误,采取相应的对策,这种 I/O 操作的随机性使得非阻塞套接字显得难于操作。解决方法:对于非阻塞的套接字工作模式,进一步引入了五种“套接字I/O 模型” ,有助于应该程序通过一种异步方式,同时对一个或多个套接字上进行的通信加以管理。对于阻塞的套接字工作模式,则进一步引入了多线程机制。2、 简述 Win32操作系统下的多进程多线程机制。答:Win32操作系统还支持同一进程的多线程。在一个Windows进程内,可以包含多个线

45、程。一个线程(thread) 是进程内的一条执行路径,具体地说,是一个应用程序中的一条可执行路径,往往是应用程序中的一个或多个函数。一个进程中至少要有一个线程,习惯将它称为主线程。任何一个应用程序进程都有一个主线程。3、 多线程机制在网络编程中如何应用?答:如果一个应用程序,有多个任务需要同时进行处理,那就最适合使用多线程机制。对于网络上客户机软件,采用多线程的编程技术,能克服在单线程的编程模式下,由于阻塞等待而产生的客户程序就不能及时响应用户的操作命令的问题。对于网络上服务器软件,采用多线程的编程技术,能更好地为多个客户服务。即便是对于一个客户,采用多线程机制也能大大提高应用程序的运行效率。

46、4、 说明用户接口线程和工作线程的概念和特点。答:用户接口线程:通常用来处理用户输入产生的消息和事件,并独立地响应正在应用程序其它部分执行的线程们产生的消息和事件。用户接口线程包含一个消息处理的循环,以应对各种事件。工作线程:适用于处理那些不要求用户输入并且比较消耗时间的其他任务。对用户来说,工作线程运行在后台。这就使得工作线程特别适合去等待一个事件的发生。5、 简述创建 MFC 的工作线程所必需的步骤。答: (1)是编程实现控制函数。(2)是创建并启动工作线程。(3)创建工作线程的例子。(4)创建工作线程的一般模式。6、简述创建并启动用户界面线程所必需的步骤。答:1从 CWinThread类

47、派生出自己的线程类 2改造自己的线程类3创建并启动用户界面线程7、如何正常终止线程?如何提前终止线程?答:正常终止线程:执行完毕时退出控制函数,并返回三个用来表示终止原因的值即可。提前终止线程:从线程内调用AfxEndThread 函数,就可以强迫线程终止。第八章名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 1、非阻塞套接字的五种“套接字I/O 模型” :select (选择) 、WSAAsyncSelect (异步选择)

48、、WSAEventSelect(事件选择)、Overlapped I/O (重叠式 I/O )以及 Completion port(完成端口)。2、select模型的操作步骤select (选择)模型是Winsock 中最常见的 I/O 模型。它的中心思想是利用select函数,实现对多个套接字 I/O 的管理。用 select操作一个或多个套接字句柄,一般采用下述步骤:(1)使用 FD_ZERO 宏,初始化自己感兴趣的每一个fd_set 集合。(2)使用 FD_SET 宏,将要检查的套接字句柄添加到自己感兴趣的每个fd_set集合中,相当在指定的fd_set 集合中,设置好要检查的I/O 活

49、动。(3)调用 select函数,然后等待。 select完成返回后,会修改每个fd_set 结构,删除那些不存在待决 I/O 操作的套接字句柄,在各个fd_set 集合中返回符合条件的套接字。(4)根据 select的返回值,使用 FD_ISSET宏,对每个 fd_set 集合进行检查,判断一个特定的套接字是否仍在集合中,便可判断出哪些套接字存在着尚未完成(待决)的I/O 操作。(5)知道了每个集合中“待决”的I/O 操作之后,对相应的套接字的I/O 进行处理,然后返回步骤1,继续进行 select处理。3、WSAAsyncSelect异步 I/O 模型的编程步骤用 CreateWindow

50、 函数创建一个窗口,并为该窗口提供一个窗口回调例程。调用 WSAAsyncSelect 函数创建套接字,指定关注的套接字、窗口句柄、打算接收的消息,以及程序感兴趣的套接字事件。成功执行WSAAsyncSelec 函数,就打开了窗口的消息通知,并注册了事件。WSAAsyncSelec函数执行时,当注册的套接字事件之一发生时,指定的窗口会收到指定的消息,并自动执行该窗口的回调例程,可在其中添加自己的代码,处理相应的事件。4、WSAEventSelect事件选择模型的编程步骤创建事件对象句柄事 件 选 择 模 型 要 求 应 用 程序 针 对 每一 个 套 接 字 , 首 先 创 建一 个 事 件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com