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

上传人:b****8 文档编号:11041121 上传时间:2023-02-24 格式:DOCX 页数:33 大小:812.26KB
下载 相关 举报
网络编程实用教程课后习题.docx_第1页
第1页 / 共33页
网络编程实用教程课后习题.docx_第2页
第2页 / 共33页
网络编程实用教程课后习题.docx_第3页
第3页 / 共33页
网络编程实用教程课后习题.docx_第4页
第4页 / 共33页
网络编程实用教程课后习题.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

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

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

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

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

第一章网络编程基础

1.什么是线程,什么是进程?

答:

进程是处于运行过程中的程序实例,是操作系统调度和分配资源的基本单位。

一个进程实体由程序代码、数据和进程控制块三部分构成。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

2.描述网络应用程序的一般组成。

为什么说应用层协议是在应用程序中实现的?

答:

从功能上,可以将网络应用程序分为两部分,一部分是专门负责网络通信的模块,它们与网络协议栈相连接,借助网络协议栈提供的服务完成网络上数据信息的交换。

另一部分是面向用户或者作其他处理的模块,它们接收用户的命令,或者对借助网络传输过来的数据进行加工,这两部分模块相互配合,来实现网络应用程序的功能。

2.实现网间进程通信必须解决哪些问题?

答:

(1)网间进程的标识问题;

(2)如何与网络协议栈连接的问题;(3)协议的识别问题;(4)不同的通信服务的问题

4.说明TCP/IP中,端口的概念和端口的分配机制。

答:

端口是TCP/IP协议族中,应用层进程与传输层协议实体间的通信接口。

TCP/IP协议采用了全局分配(静态分配)和本地分配(动态分配)相结合的分配方法。

对于TCP,或者UDP,将它们的全部65535个端口号分为保留端口号和自由端口号两部分。

保留端口的范围是0—1023,又称为众所周知的端口或熟知端口(well-knownport),其余的端口号,1024-65535,称为自由端口号,采用本地分配,又称为动态分配的方法。

总之,TCP或UDP端口的分配规则是:

端口0:

不使用,或者作为特殊的使用;端口1-255:

保留给特定的服务,TCP和UDP均规定,小于256的端口号才能分配给网上著名的服务;端口256-1023:

保留给其他的服务,如路由;

端口1024-4999:

可以用作任意客户的端口;端口5000-65535:

可以用作用户的服务器端口。

5.什么是网络应用进程的网络地址?

说明三元组和五元组的概念。

答:

应用层进程地址=(传输层协议,主机的IP地址,传输层的端口号),它标识了因特网中,进程间通信的一个端点,也把它称为进程的网络地址。

(传输层协议,主机的IP地址,传输层的端口号),这样一个三元组,叫做一个半相关(half-association)。

(传输层协议,本地机IP地址,本地机传输层端口,远地机IP地址,远地机传输层端口),五元组称为一个全相关(association)。

即两个协议相同的半相关才能组合成一个合适的全相关,或完全指定一对网间通信的进程。

6.举例说明面向消息的协议与基于流动协议有什么不同。

答:

例如甲向乙发送三个消息,分别是:

128、64和32字节。

面向消息的协议中,如果接受缓冲区是256字节,足以接收3条消息,且这三条消息全部达到。

乙仍然需要发送3条读取消息。

分别返回128、64、32字节,而不用一次读取来调用者单个数据包。

基于流的消息协议中,在接收端乙的堆栈把所有进来的消息数据包聚集在一起,放入堆栈,等待应用进程读取。

进程发送读取命令,指定了进程接收缓冲区,如果进程缓冲区有256字节,系统马上返回全部224字节。

7.TCP提供的服务有哪些特征?

答:

应用层进程提供一个面向连接的、端到端的、完全可靠的(无差错、无丢失、无重复或失序)全

双工的流传输服务。

允许网络中的两个应用程序建立一个虚拟的链接,在任何一个方向上发送数据,把数据当作一个双向字节流进行交换,最后终止连接。

8.简要说明三类网络编程。

答:

基于WWW应用的网络编程技术,包括所见即所得的网页制作工具,和动态服务器页面的制作技术。

.NET平台有四组产品①开发工具②专用服务器③Web服务。

④设备。

MS.NET顺应了软件工业的趋势,包括4个方面:

①分布式计算②组件化③企业级别的服务④WEB范型转移。

.NET平台由三层软件构成①顶层是全新的开发工具VS.NET,②中间层包括三部分:

.NET服务器、.NET服务构件和.NET框架。

③底层是WINDOWS操作系统。

Web服务是松散耦合的可复用的软件模块,在Internet上发布后,能通过标准的Internet协议在程序中访问,具有以下的特点:

(1)可复用

(2)松散耦合(3)封装了离散(4)Web服务可以在程序中访问(5)Web服务在Internet上发布

9.说明C/S模式的概念、工作过程和特点。

答:

C/S模式即客户机/服务器模式,是应用程序最常用的通信模式。

服务器的工作过程是:

(1)打开一通信通道,并告知服务器所在的主机,它愿意在某一公认的地址上接收客户请求。

(2)等待客户的请求到达该端口。

(3)服务器接收到服务请求,处理该请求并发送应答信号。

为了能并发地接收多个客户的服务请求,要激活一个新进程或新线程来处理这个客户请求(如UNIX系统中用fork、exec)。

服务完成后,关闭此新进程与客户的通信链路,并终止。

(4)返回第二步,等待并处理另一客户请求。

(5)在特定的情况下,关闭服务器。

客户方工作过程:

(1)打开一通信通道,并连接到服务器所在主机的特定监听端口。

(2)向服务器发送请求报文,等待并接收应答;继续提出请求,与服务器的会话按照应用协议进行。

(3)请求结束后,关闭通信通道并终止。

特点:

(1)客户和服务器都是软件进程,C/S模式是网络上通过进程通信建立分布式应用的常用模型。

(2)非对称性:

服务器通过网络提供服务,客户通过网络使用服务,这种不对称性体现在软件结构和工作过程上。

(3)对等性:

客户和服务器必有一套共识的约定,必与以某种应用层协议相联,并且协议必须在通信的两端实现。

(4)服务器的被动性:

服务器必须先行启动,时刻监听,及时服务,只要有客户请求,就立即处理并响应,回传信息。

但决不主动提供服务。

(5)客户机的主动性:

客户机可以随时提出请求,通过网络得到服务,也可以关机走人,一次请求与服务的过程是由客户机首先激发的。

(6)一对多:

一个服务器可以为多个客户机服务,客户机也可以打开多个窗口,连接多个服务器。

(7)分布性与共享性:

资源在服务器端组织与存储,通过网络分散在多个客户端使用。

10.说明用户和客户机,服务器和服务器类计算机的区别。

答:

“客户”(client)和服务器都指的是应用进程,即计算机软件。

“用户”(user)指的是使用计算机的人。

服务器(server)这个术语来指那些运行着的服务程序。

服务器类计算机(server-classcomputer)这一术语来称呼那些运行服务器软件的强大的计算机。

第二章UNIX套接字编程接口

2.实现套接字编程接口的两种方式是什么?

答:

一种是在操作系统的内核中增加相应的软件来实现,一种是通过开发操作系统之外的函数库来实现。

4.什么是套接字?

答:

是应用程序通过网络协议栈进行通信交互的接口。

5.说明套接字特点。

答:

(1)通信域。

套接字通常只和同一域中的套接字交换数据。

如果数据交换要穿越域的边界,就一定要执行某种解释程序。

(2)套接字有三种类型,流式、数据包和原始套接字。

(3)套接字由应用层创建,并为其服务,而后被释放。

(4)使用确定的IP地址和传输层端口号。

6.说明套接字应用场合。

答:

(1)不管是采用对等模式或者客户机/服务器模式,通信双方的应用程序都需要开发。

(2)双方所交换数据的结构和交换数据的顺序有特定的要求,不符合现在成熟的应用层协议,甚至需要自己去开发应用层协议,自己设计最适合的数据结构和信息交换规程。

7.说明本机字节顺序和网络字节顺序的概念。

答:

在具体计算机中的多字节数据的存储顺序,称为本机字节顺序。

多字节数据在网络协议报头中的存储顺序,称为网络字节顺序。

8.流式套接口的工作过程

9.什么是阻塞问题?

如何对应?

答:

阻塞是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。

利用UNIX操作系统的FORK()系统调用,编制多进程并发执行的服务器程序。

第三章Windows环境的网络编程

1.试述WinSock1.1的特点。

答:

(1)WinSock1.1全面继承了BerkeleySockets规范

(2)数据库函数。

其中六个采用getXbyY()的形式,大多要借助网络上的数据库来获得信息,

(3)WinSock1.1扩充了BerkeleySockets规范

(4)WinSock1.1只支持TCP/IP协议栈

2.WinSock规范与Berkeley套接口的区别是什么?

答:

a.套接口数据类型和该类型的错误返回值

b.select()函数和FD_*宏。

在Winsock中,使用select()函数时,应用程序应坚持用FD_XXX宏来设置,初始化,清除和检查fd_set结构。

c.错误代码的获得在Winsock中,错误代码可以使用WSAGetLastError()调用得到。

d.指针所有应用程序与WindowsSockets使用的指针都必须是FAR指针。

e.重命名的函数。

(1)close()改变为closesocket()

(2)ioctl()改变为ioctlsocket()

f.Winsock支持的最大套接口数目在WINSOCK.H中缺省值是64,在编译时由常量FD_SETSIZE决定。

g.头文件Berkeley头文件被包含在WINSOCK.H中。

一个WindowsSockets应用程序只需简单地包含WINSOCK.H就足够了。

h.Winsock规范对于原始套接口的支持.i.Winsock规范对于原始套接口和消息驱动机制的支持。

体现在异步选择机制、异步请求函数、阻塞处理方法、错误处理、启动和终止等方面。

3.WinSock的注册和注销过程

答:

注册过程:

调用WSAStartup的格式:

intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);wVersionRequested:

指定要使用的WinSock的最高版本号,lpWSAData用来返回WinSockAPI实现细节的WSAData结构变量指针。

注销过程:

应用程序必须调用WSACleanup()函数,来解除与Winsock.DLL库的绑定,释放Winsock实现分配给应用程序的系统资源,中止对WindowsSocketsDLL的使用。

intWSACleanup(void);

4.说明WSAStartup函数初始化过程。

(1)查找WinSock.DLL文件,如果有WinSock实现,则调入相关信息。

若无,则初始化失败。

返回错误信息。

(2)。

确认版本号。

(3)建立WinSock同应用程序的联系。

(4)函数创建成功,在WSAData结构中返回许多信息,否则,通知用户“初始化失败”。

5.画框图说明同步套接字的send函数的初始化过程。

第四章

1.为什么说MFC是一个编程框架?

它提供了哪些相应的工具?

MFC应用程序框架,简称MFC框架,是由MFC(MicrosoftFoundationClassLibrary)中的各种类结合起来构成的。

MFC框架从总体上定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员只须通过预定义的接口把具体应用程序特有的东西填入这个轮廓,就能建立Windows下的应用程序。

MicrosoftVisualC++提供了相应的工具来完成这个工作:

用应用程序向导(AppWizard)可以生成应用程序的骨架文件(代码和资源等);用资源编辑器可以直观地设计用户接口;用类向导(ClassWizard)可以将代码添加到骨架文件;用编译器可以通过类库实现应用程序特定的逻辑。

MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。

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.说明MFC对象和Windows对象的关系。

所谓Windows对象是Win32下用句柄表示的Windows操作系统对象;所谓MFC对象是C++对象,是一个C++类的实例。

两者有很大的区别,但联系紧密。

以窗口对象为例:

图4.3MFC的CWnd类窗口对象和Windows的窗口对象的关系

6.说明MFC对象和Windows对象的区别。

(1)对应的数据结构不同

(2)所处的层次不同

(3)创建的机制不同

(4)二者转换的方式不同

(5)使用的范围不同

(6)销毁的方法不同

7.CObject类具有哪些特性?

CObject类有很多有用的特性:

对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。

8.说明应用程序、文档模板、边框窗口、视图和文档等的创建关系。

P121

答:

应用程序是全局对象,在启动程序之前构造;应用程序创建文档模板;文档模板创建文档和边框窗口;边框窗口创建试图。

9.说明WinMain入口函数的流程。

P123

10.消息循环的过程是什么?

P124

11.应用程序的退出过程是什么?

下面以单击主窗口的关闭按钮为例,来说明应用程序退出的过程。

1)用户单击主窗口的关闭按钮,导致发送MFC标准命令消息ID_APP_EXIT。

MFC调用CwinApp:

OnAppExit()来完成对该命令消息的缺省处理,主要是向主窗口发送WM_CLOSE消息。

2)主窗口处理WM_CLOSE消息。

3)收到WM_QUIT消息后,退出消息循环,进而退出整个应用程序。

第五章

一、MFC提供的两个套接字类是什么?

答:

CAsyncSocket类,CSocket类。

二、为什么说CAsyncSocket类是在很低的层次上对WindowsSocketsAPI进行了封装?

答:

它的成员函数和WindowsSocketsAPI的函数调用直接对应。

一个CAsyncSocket对象代表了一个Windows套接字。

它是网络通信的端点。

除了把套接字封装成C++的面向对象的形式供程序员使用以外,这个类唯一所增加的抽象就是将那些与套接字相关的Windows消息变为CAsyncSocket类的回调函数。

三、为什么说Csocket类是对WindowsSocketsAPI的高级封装?

答:

CSocket类继承了CAsyncSocket类的许多成员函数,用法一致。

CSocket类的高级表现在三个方面:

(1)CSocket结合archive类来使用套接字。

(2)CSocket管理了通信的许多方面,如字节顺序问题和字符串转换问题。

(3)CSocket类为Windows消息的后台处理提供了阻塞的工作模式。

四、使用CAsyncSocket类的一般步骤是什么?

答:

序号

服务器(Server)

客户机(Client)

1

//构建一个套接字

CAsyncSocketsockSrvr;

//构建一个套接字

CAsyncSocketsockClient;

2

//创建SOCKET句柄,绑定到指定的端口

sockSrvr.Create(nPort);

//创建SOCKET句柄,使用默认参数

sockClient.Create();

3

//启动监听,时刻准备接受连接请求

sockSrvr.Listen();

4

//请求连接到服务器

sockClient.Connect(strAddr,nport);

5

//构造一个新的空的套接字

CasyncSocketsockRecv;

//接收连接sockSrvr.Accept(sockRecv);

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_WRITE事件通知:

通知可以写数据。

(3)FD_ACCEPT事件通知:

通知监听套接字有连接请求可以接受。

(4)FD_CONNECT事件通知:

通知请求连接的套接字,连接的要求已被处理。

(5)FD_CLOSE事件通知:

通知套接字已关闭。

(6)FD_OOB事件通知:

通知将有带外数据到达

处理:

按照Windows的消息驱动机制,MFC框架应当把消息发送给相应的套接字对象,并调用作为该对象成员函数的事件处理函数。

事件与处理函数是一一映射的。

在afxSock.h文件中的CAsyncSocket类的声明中,定义了与这六个网络事件对应的事件处理函数。

virtualvoidOnReceive(intnErrorCode);对应FD_READ事件

virtualvoidOnSend(intnErrorCode);对应FD_WRITE事件

virtualvoidOnAccept(intnErrorCode);对应FD_ACCEPT事件

virtualvoidOnConnect(intnErrorCode);对应FD_CONNECT事件

virtualvoidOnClose(intnErrorCode);对应FD_CLOSE事件

virtualvoidOnOutOfBandData(intnErrorCode);对应FD_OOB事件

六、CSocket类如何通过Carchive对象来进行数据传输?

答:

使用CArchive对象和套接字一起进行数据传输工作,必须使用流式套接字

七、说明CSocket类的编程模型。

答:

下面给出针对流式套接字的CSocket类的编程模型

1.服务器端

(1)CSocketsockServ;//创建空的服务器端监听套接字对象。

//用众所周知的端口,创建监听套接字对象的底层套接字句柄。

(2)sockServ.Create(nPort);

(3)sockServ.Listen();//启动对于客户端连接请求的监听。

(4)CSocketsockRecv;//创建空的服务器端连接套接字对象。

sockServ.Accept(sockRecv);//接收客户端的连接请求,并将其他的任务转交给连接套接字对象。

(5)CSockFile*file;

file=newCSockFile(&sockRecv);//创建文件对象并关联到连接套接字对象。

(6)CArchive*arIn,arOut;

arIn=CArchive(&file,CArchive:

:

load);//创建用于输入的归档对象,

arOut=CArchive(&file,CArchive:

:

store);//创建用于输出的归档对象。

//归档对象必须关联到文件对象。

(7)arIn>>dwValue;//进行数据输入。

adOut<

输入或输出可以反复进行。

(8)sockRecv.Close();

sockServ.Close();//传输完毕,关闭套接字对象。

2.客户端

(1)CSocketsockClient;//创建空的客户机端套接字对象。

(2)sockClient.Create();//创建套接字对象的底层套接字。

(3)sockClient.Connect(strAddr,nPort);//请求连接到服务器。

(4)CSockFile*file;

file=newCSockFile(&sockClent);//创建文件对象,并关联到套接字对象。

(5)CArchive*arIn,arOut;

arIn=CArchive(&file,CArchive:

:

load);//创建用于输入的归档对象,

arOut=CArchive(&file,CArchive:

:

store);//创建用于输出的归档对象。

//归档对象必须关联到文件对象。

(6)arIn>>dwValue;//进行数据输入。

adOut<

输入或输出可以反复进行。

(7)sockClient.Close();//传输完毕,关闭套接字对象。

八、说明使用MFCAppWizard创建客户机端应用程序框架具体的步骤?

答:

1.使用MFCAppWizard创建客户端应用程序框架。

创建的程序是一个基于对话框的Win32应用程序,将自动创建两个类,应用程序类CTalkcApp,对应的文件是talkc.h和talkc.cpp;对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp。

支持WindowsSocket,使用共享的DLL实现MFC42.DLL。

2.为对话框界面添加控件对象

利用控件面板在程序的主对话框界面中添加相应的可视控件对象,然后修改控件的属性

3.为对话框中的控件对象定义相应的成员变量

4.创建从CAsyncSocket类继承的派生类

(1)选择菜单“插入/新建类”,进入“NewClass”对话,选择或输入以下信息:

ClassType:

选择MFCClass

ClassInfoumation下的Name:

输入CMySocket

ClassInfoumation下的Baseclass:

选择CAsyncSocket

点击“OK”按钮,系统会自动生成CMySocket类对应的包含文件MySocket.h和MySocket.cpp文件,在VC界面的ClassView中就可以看到这个类。

(2)利用类向导ClassWizard为这个套接字类添加响应消息的事件处理成员函数,此程序中需要添加OnConnect,OnClose和OnReceive三个函数。

(3)为套接字类CMySocket类添加一般的成员函数和成员变量。

对这个套接字类,添加一个私有的成员变量,是一个对话框类的指针。

private:

CTalkcDlg*m_pDlg;再添加一个成员函数:

voidSetParent(CTalkcDlg*pDlg);

(4)手工添加其他代码

对于MySocket.h,应在文件开头,添加对于

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1