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

上传人:门**** 文档编号:76480730 上传时间:2022-04-18 格式:DOC 页数:19 大小:1.75MB
收藏 版权申诉 举报 下载
网络编程实用教程课后习题_第1页
第1页 / 共19页
网络编程实用教程课后习题_第2页
第2页 / 共19页
网络编程实用教程课后习题_第3页
第3页 / 共19页
资源描述:

《网络编程实用教程课后习题》由会员分享,可在线阅读,更多相关《网络编程实用教程课后习题(19页珍藏版)》请在装配图网上搜索。

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

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

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

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

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

6、编程技术,包括所见即所得的网页制作工具,和动态服务器页面的制作技术。 .NET平台有四组产品 开发工具 专用服务器 Web 服务。 设备。MS.NET顺应了软件工业的趋势,包括4个方面: 分布式计算 组件化 企业级别的服务 WEB 范型转移。.NET平台由三层软件构成 顶层是全新的开发工具VS.NET, 中间层包括三部分:.NET服务器、.NET服务构件和.NET框架。 底层是WINDOWS操作系统。Web服务是松散耦合的可复用的软件模块,在Internet上发布后,能通过标准的Internet 协议在程序中访问,具有以下的特点:(1)可复用(2)松散耦合(3)封装了离散(4)Web服务可以在

7、程序中访问(5)Web服务在Internet上发布 9说明C/S模式的概念、工作过程和特点。 答:C/S模式即客户机/服务器模式,是应用程序最常用的通信模式。服务器的工作过程是:(1)打开一通信通道,并告知服务器所在的主机,它愿意在某一公认的地址上接收客户请求。(2)等待客户的请求到达该端口。(3)服务器接收到服务请求,处理该请求并发送应答信号。为了能并发地接收多个客户的服务请求,要激活一个新进程或新线程来处理这个客户请求(如UNIX系统中用fork、exec)。服务完成后,关闭此新进程与客户的通信链路,并终止。(4)返回第二步,等待并处理另一客户请求。(5)在特定的情况下,关闭服务器。 客户

8、方工作过程:(1)打开一通信通道,并连接到服务器所在主机的特定监听端口。(2)向服务器发送请求报文,等待并接收应答;继续提出请求,与服务器的会话按照应用协议进行。(3)请求结束后,关闭通信通道并终止。特点:(1)客户和服务器都是软件进程,C/S模式是网络上通过进程通信建立分布式应用的常用模型。(2)非对称性:服务器通过网络提供服务,客户通过网络使用服务,这种不对称性体现在软件结构和工作过程上。(3)对等性:客户和服务器必有一套共识的约定,必与以某种应用层协议相联,并且协议必须在通信的两端实现。(4)服务器的被动性:服务器必须先行启动,时刻监听,及时服务,只要有客户请求,就立即处理并响应,回传信

9、息。但决不主动提供服务。(5)客户机的主动性:客户机可以随时提出请求,通过网络得到服务,也可以关机走人,一次请求与服务的过程是由客户机首先激发的。(6)一对多:一个服务器可以为多个客户机服务,客户机也可以打开多个窗口,连接多个服务器。(7)分布性与共享性:资源在服务器端组织与存储,通过网络分散在多个客户端使用。10.说明用户和客户机,服务器和服务器类计算机的区别。答:“客户”(client)和服务器都指的是应用进程,即计算机软件。“用户”(user)指的是使用计算机的人。 服务器(server)这个术语来指那些运行着的服务程序。服务器类计算机(server-class computer)这一术

10、语来称呼那些运行服务器软件的强大的计算机。第二章 UNIX套接字编程接口2.实现套接字编程接口的两种方式是什么?答:一种是在操作系统的内核中增加相应的软件来实现,一种是通过开发操作系统之外的函数库来实现。 4.什么是套接字? 答:是应用程序通过网络协议栈进行通信交互的接口。5.说明套接字特点。 答:(1)通信域。套接字通常只和同一域中的套接字交换数据。如果数据交换要穿越域的边界,就一定要执行某种解释程序。(2)套接字有三种类型,流式、数据包和原始套接字。(3)套接字由应用层创建,并为其服务,而后被释放。(4)使用确定的IP地址和传输层端口号。6.说明套接字应用场合。答:(1)不管是采用对等模式

11、或者客户机/服务器模式,通信双方的应用程序都需要开发。(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)WinSock 1.1只支持TCP/IP协议栈 2.WinSock规范与Berkeley套接口的区别是什么?答:a.套接口数据类型和该类型的错误返回值b.select()函数和FD_*宏。在Winsoc

13、k中,使用select()函数时,应用程序应坚持用FD_XXX宏来设置,初始化,清除和检查fd_set结构。 c.错误代码的获得 在Winsock中,错误代码可以使用WSAGetLastError()调用得到。d.指针所有应用程序与Windows Sockets使用的指针都必须是FAR指针。e.重命名的函数。(1)close()改变为closesocket()(2)ioctl()改变为ioctlsocket() f.Winsock支持的最大套接口数目 在WINSOCK.H中缺省值是64,在编译时由常量FD_SETSIZE决定。g.头文件 Berkeley头文件被包含在WINSOCK.H中。一个

14、Windows Sockets应用程序只需简单地包含WINSOCK.H就足够了。h. Winsock规范对于原始套接口的支持.i.Winsock规范对于原始套接口和消息驱动机制的支持。体现在异步选择机制、异步请求函数、阻塞处理方法、错误处理、启动和终止等方面。 3.WinSock的注册和注销过程 答:注册过程:调用WSAStartup 的格式:int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); wVersionRequested:指定要使用的WinSock的最高版本号, lpWSAData用来返回WinSockAPI实现

15、细节的WSAData结构变量指针。注销过程:应用程序必须调用WSACleanup()函数,来解除与Winsock.DLL库的绑定,释放Winsock实现分配给应用程序的系统资源,中止对Windows Sockets DLL的使用。 int WSACleanup ( void ); 4.说明WSAStartup函数初始化过程。(1)查找WinSock.DLL文件,如果有WinSock实现,则调入相关信息。若无,则初始化失败。返回错误信息。(2)。确认版本号。(3)建立WinSock同应用程序的联系。(4)函数创建成功,在WSAData结构中返回许多信息,否则,通知用户“初始化失败”。5.画框图说

16、明同步套接字的send函数的初始化过程。: 第四章1.为什么说MFC是一个编程框架?它提供了哪些相应的工具? MFC应用程序框架,简称MFC框架,是由MFC(Microsoft Foundation Class Library)中的各种类结合起来构成的。MFC框架从总体上定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员只须通过预定义的接口把具体应用程序特有的东西填入这个轮廓,就能建立Windows下的应用程序。 Microsoft Visual C+提供了相应的工具来完成这个工作:用应用程序向导(AppWizard)可以生成应用程序的骨架文件(代码和资源等);用资源编辑器可以直观地

17、设计用户接口;用类向导(ClassWizard)可以将代码添加到骨架文件;用编译器可以通过类库实现应用程序特定的逻辑。MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。 2.MFC类库封装了哪些内容?1)对Win32应用程序编程接口的封装 2)对应用程序概念的封装 3)对COM/OLE特性的封装 4)对ODBC功能的封装 3.典型的MDI应用程序AppWizard会自动创建一系列文件,如果工程的名字是My,这些文件的名字是什么? 头文件My.h,实现文件My.cpp,资源文件My.rc和模块定义文件My.def4.说明构成应用程序的对象之间的关系。 这里

18、,用图的形式可直观地表示所涉及的MFC类的继承或者派生关系,如图4.2所示意。 图4.2 构成MDI应用程序的各对象之间的派生关系 5.说明MFC对象和Windows对象的关系。所谓Windows对象是Win32下用句柄表示的Windows操作系统对象;所谓MFC对象是C+对象,是一个C+类的实例。两者有很大的区别,但联系紧密。 以窗口对象为例: 图4.3 MFC的CWnd类窗口对象和Windows的窗口对象的关系 6.说明MFC对象和Windows对象的区别。(1)对应的数据结构不同(2)所处的层次不同(3)创建的机制不同(4)二者转换的方式不同(5)使用的范围不同(6)销毁的方法不同7.C

19、Object类具有哪些特性?CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。8.说明应用程序、文档模板、边框窗口、视图和文档等的创建关系。P121答:应用程序是全局对象,在启动程序之前构造;应用程序创建文档模板;文档模板创建文档和边框窗口;边框窗口创建试图。9.说明WinMain入口函数的流程。P12310.消息循环的过程是什么?P12411.应用程序的退出过程是什么?下面以单击主窗口的关闭按钮为例,来说明应用程序退出的过程。1) 用户单击主窗口的关闭按钮,导致发送MFC标准命令消息ID_APP_EXIT。MFC调用CwinApp:

20、OnAppExit()来完成对该命令消息的缺省处理,主要是向主窗口发送WM_CLOSE消息。2) 主窗口处理WM_CLOSE消息。3) 收到WM_QUIT消息后,退出消息循环,进而退出整个应用程序。第五章一、MFC提供的两个套接字类是什么?答:CAsyncSocket类,CSocket类。二、为什么说CAsyncSocket类是在很低的层次上对Windows Sockets API进行了封装?答:它的成员函数和Windows Sockets API的函数调用直接对应。一个CAsyncSocket对象代表了一个Windows套接字。它是网络通信的端点。除了把套接字封装成C+的面向对象的形式供程序

21、员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的Windows消息变为CAsyncSocket类的回调函数。 三、为什么说Csocket类是对Windows Sockets API的高级封装?答:CSocket类继承了CAsyncSocket类的许多成员函数,用法一致。CSocket类的高级表现在三个方面:(1)CSocket结合archive类来使用套接字。(2)CSocket管理了通信的许多方面,如字节顺序问题和字符串转换问题。 (3)CSocket类为Windows消息的后台处理提供了阻塞的工作模式。 四、使用CAsyncSocket类的一般步骤是什么?答:序号服务器(Serv

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

23、kRecv);6/接收数据sockSrvr.Receive(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_WRIT

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

25、ode); 对应 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类如何通过C

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

27、ckRecv); / 接收客户端的连接请求,并将其他的任务转交给连接套接字对象。(5)CSockFile* file ;file = new CSockFile( &sockRecv); /创建文件对象并关联到连接套接字对象。(6)CArchive* arIn, arOut;arIn = CArchive(&file, CArchive:load); / 创建用于输入的归档对象,arOut = CArchive( &file, CArchive:store); / 创建用于输出的归档对象。/ 归档对象必须关联到文件对象。(7)arIn dwValue; / 进行数据输入。adOut dwVal

28、ue; / 进行数据输入。adOut dwValue; / 进行数据输出。输入或输出可以反复进行。(7)sockClient.Close(); / 传输完毕,关闭套接字对象。 八、说明使用MFCAppWizard创建客户机端应用程序框架具体的步骤?答:1使用MFC AppWizard创建客户端应用程序框架。创建的程序是一个基于对话框的Win32应用程序,将自动创建两个类,应用程序类CTalkcApp,对应的文件是talkc.h和talkc.cpp;对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp。支持Windows Socket,使用共享的DLL实现MFC

29、42.DLL。 2为对话框界面添加控件对象利用控件面板在程序的主对话框界面中添加相应的可视控件对象,然后修改控件的属性3为对话框中的控件对象定义相应的成员变量4创建从CAsyncSocket类继承的派生类(1)选择菜单“插入/新建类”,进入“New Class”对话,选择或输入以下信息:Class Type:选择MFC ClassClass Infoumation下的Name: 输入CMySocketClass Infoumation下的Base class:选择CAsyncSocket点击“OK”按钮,系统会自动生成CMySocket类对应的包含文件MySocket.h和MySocket.c

30、pp文件,在VC界面的Class View中就可以看到这个类。 (2)利用类向导ClassWizard为这个套接字类添加响应消息的事件处理成员函数,此程序中需要添加OnConnect,OnClose和OnReceive三个函数。(3)为套接字类CMySocket类添加一般的成员函数和成员变量。对这个套接字类,添加一个私有的成员变量,是一个对话框类的指针。private:CTalkcDlg * m_pDlg; 再添加一个成员函数:void SetParent(CTalkcDlg * pDlg);(4)手工添加其他代码对于MySocket.h,应在文件开头,添加对于此应用程序对话框类的声明:cla

31、ss CTalkcDlg;对于MySocket.cpp,有四处添加: 应在文件开头,添加包含文件说明。这是因为此套接字类用到了对话框类的变量。#include “TalkcDlg.h” 在构造函数中,添加对于对话框指针成员变量的初始化代码:CMySocket:CMySocket() m_pDlg = NULL; 在析构函数中,添加对于对话框指针成员变量的初始化代码:CMySocket:CMySocket() m_pDlg = NULL; 为成员函数setParent和事件处理函数OnConnect,OnClose和OnReceive添加代码。5为对话框类添加控件对象事件的响应函数6为CTalk

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

33、控件变量的初始化代码BOOL CTalkcDlg:OnInitDialog()m_strServName=localhost; / 服务器名 = localhostm_nServPort=1000; / 服务端口 = 1000UpdateData(FALSE); / 更新用户界面/设置套接字类的对话框指针成员变量m_sConnectSocket.SetParent(this); 8添加事件函数和成员函数的代码主要在CTalkcDlg对话框类的talkcDlg.cpp中和CMySocket类的Mysocket.cpp中,添加用户自己的事件函数和成员函数的代码。9进行测试。九、说明点对点交谈的客户

34、机端程序的类与消息驱动关系?答: 下图说明了点对点交谈的客户端程序的类与消息驱动关系第六章1. 说明了各种HINTERNET句柄形成的树形体系答: 2. 如何获取WinInet API函数执行的错误信息?答:从函数的返回值来说,WinInet API主要有两种类型。一种函数的返回值类型是HINTERNET句柄型,一种函数的返回值类型是布尔型。应用程序可以根据函数执行后的返回值来判断函数的执行是否成功。对于前一种函数,当函数执行成功时,会返回一个有效的句柄;当函数失败时,则返回NULL。对于后一种函数,当函数执行成功时,返回TRUE;当函数失败时,返回FALSE。在函数调用失败后,用户往往需要了

35、解出错的具体原因,应用程序可以随即调用GetLastError函数来获取更具体的错误信息。 3、说明使用WinInet API编制FTP客户机端应用程序的一般步骤答:(1)调用InternetAttemptConnect函数测试主机与Internet的连接状态,(2)调用InternetOpen函数,创建HINTERNET会话根句柄。(3)创建FTP会话句柄4、MFC WinInet所包含的类有哪些?答:1、CInternetSession类,2连接类,包括CInternetConnection类和它的派生类CFtpConnection类、CHttpConnection类、和CGopherCo

36、nnection类;3文件类,首先包括CInternetFile类和由它派生的CHttpFile类和CGopherFile类,另外,由CFileFind类派生的用于文件查找的CFtpFileFind类和CGopherFileFind类也应归入文件类的层次。4CInternetException类5、MFC WinInet 各种类之间的关系 答:如下图,其中细线箭头从基类指向继承类,表示了类的派生关系;粗线箭头从函数指向它所创建的类对象6、使用WinInet类编程的一般步骤是什么?答:1)创建CInternetSession类对象,创建并初始化Internet会话。(2)利用CInternetS

37、ession类的QueryOption或SetOption成员函数,可以查询或设置该类内含的Internet请求选项,这一步是可选。(3)创建连接类对象,建立CInternetSession对象与网络服务器的连接,也就是应用程序与网络服务器的连接。 (4)创建文件检索类对象,对服务器进行检索 (5)如果需要使用异步操作模式,可以重载CInternetSession类的OnStatusCallback函数,并启动应用程序使用状态回调机制。重载相关函数,加入自己的代码。(6)如果还想更紧密地控制对于服务器文件的访问,可以进一步创建文件类对象实例,完成文件查找或文件读写操作。(7)创建CIntern

38、etException类对象实例,处理错误。(8)关闭各种类,将资源释放给系统。第七章1、 WinSock的两种I/O模式是什么?各有什么优缺点,缺点如何解决?答:WinSock的两种I/O模式是:“阻塞”模式(Blocking Mode)或“非阻塞”模式,又称为同步模式或异步模式。阻塞模式的优点:阻塞套接字的I/O操作工作情况比较确定,无非是调用、等待、返回。大部分情况下,I/O操作都能成功地完成,不过就是花费了等待的时间。因而比较容易使用,容易编程。缺点:在应付诸如需要建立多个套接字连接来为多个客户服务的时候,或在数据的收发量不均匀的时候,或在输入输出的时间不确定的时候,却显得性能低下,甚

39、至无能为力。 非阻塞模式的优点:能应付诸如需要建立多个套接字连接来为多个客户服务,可以处理数据的收发量不均匀、输入输出的时间不确定等问题。非阻塞模式的缺点:用非阻塞套接字,需要编写更多的代码,因为必须恰当地把握调用I/O函数的时机,尽量减少无功而返的调用,还必须详加分析每个Winsock调用中收到的WSAEWOULDBLOCK错误,采取相应的对策,这种I/O操作的随机性使得非阻塞套接字显得难于操作。解决方法:对于非阻塞的套接字工作模式,进一步引入了五种“套接字I/O模型”,有助于应该程序通过一种异步方式,同时对一个或多个套接字上进行的通信加以管理。对于阻塞的套接字工作模式,则进一步引入了多线程

40、机制。 2、 简述Win32操作系统下的多进程多线程机制。答:Win32操作系统还支持同一进程的多线程。在一个Windows进程内,可以包含多个线程。一个线程(thread)是进程内的一条执行路径,具体地说,是一个应用程序中的一条可执行路径,往往是应用程序中的一个或多个函数。一个进程中至少要有一个线程,习惯将它称为主线程。任何一个应用程序进程都有一个主线程。3、 多线程机制在网络编程中如何应用?答:如果一个应用程序,有多个任务需要同时进行处理,那就最适合使用多线程机制。对于网络上客户机软件,采用多线程的编程技术,能克服在单线程的编程模式下,由于阻塞等待而产生的客户程序就不能及时响应用户的操作命

41、令的问题。对于网络上服务器软件,采用多线程的编程技术,能更好地为多个客户服务。即便是对于一个客户,采用多线程机制也能大大提高应用程序的运行效率。4、 说明用户接口线程和工作线程的概念和特点。答:用户接口线程:通常用来处理用户输入产生的消息和事件,并独立地响应正在应用程序其它部分执行的线程们产生的消息和事件。用户接口线程包含一个消息处理的循环,以应对各种事件。工作线程:适用于处理那些不要求用户输入并且比较消耗时间的其他任务。对用户来说,工作线程运行在后台。这就使得工作线程特别适合去等待一个事件的发生。5、 简述创建MFC的工作线程所必需的步骤。答:(1)是编程实现控制函数。(2)是创建并启动工作

42、线程。(3)创建工作线程的例子。(4)创建工作线程的一般模式。6、简述创建并启动用户界面线程所必需的步骤。答:1从CWinThread类派生出自己的线程类 2改造自己的线程类3创建并启动用户界面线程7、如何正常终止线程?如何提前终止线程?答:正常终止线程:执行完毕时退出控制函数,并返回三个用来表示终止原因的值即可。 提前终止线程:从线程内调用AfxEndThread函数,就可以强迫线程终止。第八章1、非阻塞套接字的五种“套接字I/O模型”:select(选择)、WSAAsyncSelect(异步选择)、WSAEventSelect(事件选择)、Overlapped I/O(重叠式I/O)以及C

43、ompletion 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活动。 (3)调用select函数,然后等待。select完成返回后,会修改每个fd_set结构,删除那些不存在待决I/O操作的套接

44、字句柄,在各个fd_set集合中返回符合条件的套接字。 (4)根据select的返回值,使用FD_ISSET宏,对每个fd_set集合进行检查,判断一个特定的套接字是否仍在集合中,便可判断出哪些套接字存在着尚未完成(待决)的I/O操作。(5)知道了每个集合中“待决”的I/O操作之后,对相应的套接字的I/O进行处理,然后返回步骤1,继续进行select处理。 3、WSAAsyncSelect异步I/O模型的编程步骤用CreateWindow函数创建一个窗口,并为该窗口提供一个窗口回调例程。调用WSAAsyncSelect函数创建套接字,指定关注的套接字、窗口句柄、打算接收的消息,以及程序感兴趣的

45、套接字事件。成功执行WSAAsyncSelec函数,就打开了窗口的消息通知,并注册了事件。WSAAsyncSelec函数执行时,当注册的套接字事件之一发生时,指定的窗口会收到指定的消息,并自动执行该窗口的回调例程,可在其中添加自己的代码,处理相应的事件。4、WSAEventSelect事件选择模型的编程步骤创建事件对象句柄事件选择模型要求应用程序针对每一个套接字,首先创建一个事件对象。创建方法是调用WSACreateEvent函数,定义如下:WSAEVENT WSACreateEvent(void);关联套接字和事件对象,注册关心的网络事件将事件对象句柄与某个套接字关联在一起,同时注册感兴趣的

46、网络事件类型。调用WSAEventSelect函数,函数的定义为:int WSAEventSelect(SOCKET s,WSAEVENT hEventObject,long lNetworkEvents); 等待网络事件触发事件对象句柄的工作状态调用WSAWaitForMultipleEvents函数,等待网络事件触发事件对象句柄的工作状态。该函数的定义:DWORD WSAWaitForMultipleEvents(DWORD cEvents,const WSAEVENT FAR * lphEvents,BOOL fWaitAll,DWORD dwTimeout,BOOL fAlertabl

47、e); 检查套接字上所发生的网络事件类型调用WSAEnumNetworkEvents函数,检查套接字上发生了什么类型的网络事件。该函数定义如下:int WSAEnumNetworkEvents(SOCKET s,WSAEVENT hEventObject,LPWSANETWORKEVENTS lpNetworkEvents); 处理网络事件在确定了套接字上发生的网络事件类型后,可以根据不同的情况做出相应的处理。完成了对WSANETWORKEVENTS结构中的事件的处理之后,应用程序应在所有可用的套接字上,继续等待更多的网络事件。应用程序完成了对一个事件对象的处理后,便应调用WSACloseEv

48、ent函数,释放由事件句柄使用的系统资源。函数的定义如下:BOOL WSACloseEvent(WSAEVENT hEvent);该函数也将一个事件句柄作为自己唯一的参数,并会在成功后返回TRUE,失败后返回FALSE。第九章1、什么是HTTP会话?HTTP会话周期由哪些阶段组成?HTTP是超文本传输协议(Hypertext Transfer Protocol)的简称,HTTP协议也是基于TCP/IP的客户/服务器协议。主要是用于传输文件的协议。HTTP会话周期由连接、请求、响应和断开4个阶段组成。建立TCP/IP连接Web客户机向服务器发送HTTP请求服务器向客户机回送HTTP响应断开TCP

49、/IP连接2、CHtmlView类的继承关系 3、利用MFC AppWizard创建SDI或MDI的步骤(1)第一步:选择应用程序结构 为应用程序选择三种结构之一,单文档(Single Document SDI),多文档(Multiple Document MDI),基于对话框(Dialog Based)。Web浏览器型的应用程序一般选择SDI类型,以下的操作都假定选择了SDI类型。决定应用程序是否要支持MFC的文档/视图结构(document/view architecture),实际上必须选择支持,因为不支持文档/视图结构的应用程序不能打开磁盘文件和从CWnd类继承的窗口区,并且后面的步骤

50、都是无效的。选择资源中的文本所使用的语言,应选择“中文中国”作完这三件事以后,点击Next按钮(2)第二步:选择应用程序支持的数据库 为程序选择一种数据库支持,有四个选项。没有(None), 头文件支持(Header file support), 带有文件支持的数据库视图(Database View with file support)或没有文件支持的数据库视图( Database View without file support)。如果选择了数据库支持,点击数据源(Data Source),在外部ODBC数据库、DAO数据库和OLE DB数据库中选择一个,然后选择相应的数据源和数据库表选项

51、。 点击Next按钮,出现第三步对话框(3)第三步:选择应用程序支持的复合文档 选择应用程序支持的复合文档(compound document)类型。有五个选项:None:不支持复合文档Container:容器,一个OLE 2.0风格的文档容器。 Mini-server:最小服务器,一个OLE服务器,但不能作为一个独立的程序来运行。Full-server:完全服务器,一个OLE服务器,可以作为独立程序运行。Both container and server:容器和服务器两者。 也可以选择选项来启用标准的ActiveX资源,增加额外的自动命令到应用程序的菜单条中。 点击Next按钮,出现第四步对

52、话框,(4)第四步:选择应用程序的接口特性 为程序选择基本的用户接口特性。如快捷的工具条、初始状态栏、打印和打印预览、内容敏感的帮助、3D控件、Windows套接字等,都是复选框。要使用的工具条形式,IE4.0 ReBars或者MFC常规的工具条。最近打开的文件列表数目,默认值是4。如果你想要修改你的程序的名字和扩展名,或者为你的程序调整用户接口窗口框架风格,点击Advanced。点击Next,出现第五步对话框。如图9.9所示。(5)第5步:决定三个问题选择工程风格:Windows Explorer:左边是一个树形视图,右边是一个列表视图。MFC Standard:为文件视图提供一个区域。选择

53、是否希望应用程序向导在源文件中产生注释,以便指导你编写程序。选择使用MFC库的选项 As a shared DLL:库作为共享的DLLAs a statically linked library:库作为静态链节的DLL注意,静态链接到MFC的库仅仅在VC+的专业版和企业版中支持(Professional and Enterprise Editions)。 点击Next,出现MFC AppWizard Step 6 of 6对话框。如图9.10。(6)第6步:决定类名和基类 如果你想要改变默认的由应用程序向导提供的类名,基类,头文件,或者实现文件的名字,输入新的名字,要改变基类,选择你的程序的视

54、图类。点击Finish按钮,出现New Project Information对话框。如图9.11。说明了应用程序的类型,创建的类、应用程序的特性和工程的目录。 点击OK按钮,工程创建成功,进入VC+集成的开发环境。 4创建一个Web浏览器型的应用程序的一般步骤利用MFC AppWizard生成应用程序框架生成的工程框架包含四个类: 应用程序类,CMyWebApp,对应myWeb.h和myWeb.cpp文件。 框架类,CMainFrame,对应MainFrm.h和MainFrm.cpp文件。 文档类,CMyWebDoc,对应myWebDoc.h和myWebDoc.cpp文件。 HtmlView

55、类,CMyWebView,对应myWebView.h和myWebView.cpp文件修改菜单 修改菜单,添加用户需要的功能条目。在工作区中选择ResourceView卡,选择Menu,双击菜单控件的名字(IDR_MAINFRAME)。修改工具栏 在工具栏上增加新的按钮,以便快速执行所需的功能。在工作区中选择ResourceView卡,选择ToolBar,双击工具条控件的名字(IDR_MAINFRAME),为控件添加事件处理函数 当用户点击菜单条目,或者点击相应的快捷按钮时,应能引起程序的反映,这就需要给这些控件添加事件处理函数。进入类向导,选择“Message Maps”卡。在“Class N

56、ame”下拉框中选择CMyWebView类,添加事件处理函数的代码为应用程序添加URL定位功能解决点击超链接时地址栏的同步问题第十章1、简述电子邮件系统的构成。答:一个电子邮件系统包括三个主要的构件,即用户代理,邮件消息传输代理,和电子邮件使用的协议。2、说明电子邮件的发送和接收的过程。答:(1) 甲运行Foxmail软件,进入它的窗口用户界面,利用其中发信代理的相关功能,编辑要发送的邮件内容。然后,填好收信人的电子邮箱地址、邮件主题等信息,单击“发送”按钮。(2) Foxmail软件中的SMTP客户机进程向网易网站的SMTP服务器发出连接请求,经过三次握手的过程建立了TCP连接。然后进入SM

57、TP客户机与SMTP服务器的会话过程,通过网络,smtp客户机发出请求命令,SMTP服务器以响应作答。(3) 一旦收到了邮件,就立即按照该邮件收件收信人的电子邮箱地址,向网站的SMTP服务器进程发起建立TCP连接的请求。经过SMTP客户机与服务器的会话过程,将邮件从发送站点传到接收站点,接收站点的服务器将邮件存放到乙的电子邮箱中,等待乙来读取。(4) 当乙读取邮件时,Foxmail软件中的POP3客户机进程立即向接收站点的POP3服务器进程发出请求,建立TCP连接,然后,按照POP3,进入POP3会话过程,将邮件或邮件的副本从位于接收的电子邮箱取出,发送到乙的pc.(5) 乙方Foxmail中

58、的收信代理向用户显示邮件,乙可以利用它的相关功能对此邮件做进一步处理。3、电子邮件系统有什么特点?答:是一种异步的通信系统,不像电话,通话的双方都必须在场。使用方便,传输迅速,费用低廉,不仅能传输文字信息,还能附上声音和图像。在电子邮件系统的实现中,ISP的服务器必须7X24小时地不间断地运行,这样才能保证用户可以随时发送和接收信件,而发送或接收电子邮件的用户则随意。 4、简述SMTP客户机与SMTP服务器之间的会话过程,以及SMTP会话具有的特点。答:如下图:说明了SMTP客户与SMTP服务器之间的会话过程 SMTP会话具有以下特点:(1)会话的过程采用交互式的请求应答模式,客户发送命令,服

59、务器回送应答。(2)客户发送的命令和服务器回送的应答都是纯文本形式,有一定格式。(3)针对客户的每个命令,服务器总要返回一定的响应码,表示服务器是否接受或执行了客户端命令。(4)会话过程有一定的顺序 5、使用WinSock来实现电子邮件客户机程序与服务器的会话的步骤是什么?答:(1)启动SMTP服务器,在指定的传输层端口监听客户端的连接请求,为SMTP服务器保留的端口是25。(2)客户端设置Winsock连接的IP地址或域名,指定端口号,主动发出连接请求,连接到SMTP服务器。比如,网易的SMTP服务器的域名是,监听端口是25。(3)服务器接收客户端的连接请求,并发回响应。客户端应收到类似22

60、0 BigFox ESMTP service ready这样的信息, 这就说明客户端已经与服务器建立TCP/IP连接,成功地实现了第一步。 (4)客户端和服务器分别向对方发送数据。(5)客户端或服务器分别读取自己缓冲区中的数据。(6)以上两步是SMTP会话的主要部分,要按照SMTP协议的规定,按照一定顺序,客户向服务器发送命令,服务器向客户发送应答,以上两步要多次重复。(7)会话完毕,关闭客户端和服务器之间的连接。 6、说明电子邮件信件结构。答:从组织上看,RFC822将电子邮件信件内容结构分为信头和信体两大部分,中间用一个空白行(只有CRLF符的行)来分隔。第一部分称为信件的头部,包括有关发送方、接收方和发送日期等信息。第二部分称为信件的体部,包括信件内容的正文文本。信头是必须的,信体是可选的,即信体可有可无。7、建议的使用在信头中的字段顺序是什么?答:一般来说,信头中的字段不要求任何特定的顺序,但Received、Return-Path和Resent-*字段例外。Received字段是在信件传送过程中,由经过的一系列的MTA投递前增

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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