计算机网络编程-复习题.docx

计算机网络编程-复习题.docx
计算机网络编程-复习题.docx

计算机网络编程复习题

一、基础部分

1、网络通信程序使用的通信模型主要有:C/S模型、B/S模型和P2P模型。

2、C/S模型将一个网络事务处为两:一是客户端(Client),它为用户提供向网络请求服务的接口;另一是服务器端(Server),它负责接受用户对服务的请求,并将这些服务透明地提供给用户。

3、浏览器/服务器(或者:Browse/Server,B/S)模型是一种基于Web的通信模型,该模型使用HTTP协议进行通信。

4、将十进制形式的IP地址:“ 123.123.123.123”转换为IPAddress实例的语句: IPAddressremoteIP=IPAddress.Parse(" 123.123.123.123")。

5、若想让线程Thread 1暂停1秒,可以在线程Thread 1中执行语句:Thread.Sleep(lOOO);。如果线程Thread 1在执行过程中需要等待另一个线程Thread2结束后,才可以继续执行,其等待时间不超过2秒,则需要在线程Thread 1屮加入语句:Thread2.Join(2000);o

6、后台线程与前台线程的区别是后台线程不会影响进程终止。通过将线程对象的IsBackground属性设置为me,使得其变为后台线程。默认情况下,属于托管线程池的线程都是后台线程,通过创建并启动新的Thread对象而生成的线程都是前台线程。

7、流(stream)是对以字节为单位吊行传输的数据的一种抽彖表示,它提供了三种基本操作:(1)写入:将数据从内存缓冲区传输到外部源。(2)读取:将数据从外部源传输到内存缓冲区。

(3)查找:重新设置流的当前位置,以便随机读写。

8、默认情况下,.NET Framework不允许在一个线程中直接操作另一个线程中的控件。解决这个问题的一种方法是:使用委托(delegate)来操作另一个线程中的控件。

9、TcpListener类用于侦听和接受传入的连接请求。TcpClient类用于提供本地主机和远程主机的连接信息。服务器端通过TcpListener对彖的AcceptTcpClient方法而得到TcpClient 对象,所以服务器端不需要使用TcpClient类的构造函数来创建TcpClient。

10、解决TCP协议消息边界问题的方法有:发送固定长度的消息、将消息长度与消息一起发送以及使用特殊标隔消息等三种。

11、编写UDP应用程序时有两种技术,一种是直接使用Socket类,另一种是使用UdpClient 类。

12、使用UdpClient编写发送和接收UDP数据报的应用程序吋,建立默认远程主机的

方式有两种:一种是使用远程主机名和端口号作为参数创建UdpClient类的实例,另一种是先创建不带参数的UdpClient类的实例,然后再调用Connection方法指定默认远程主机。

13、UdpClient类提供了JoinMulticastGroup方法,用于将UdpClient加入到指定的多播

组中。若要从多播组中退!11,调用UdpClient的DropMulticastGroup方法。

14、HttpWebRequest是针对HTTP的特定实现,它的基类是WebRequest抽象类。它对HTTP进行了完整的封装。

15、接收邮件时,客户与POP3服务器Z间的通信历经3个状态:授权状态、操作状态

和更新状态。

16、FTP常用的两种数据传输方式:ASCII传输方式、二进制数据传输方式。FTP文件

的传输模式有:主动模式(Port模式)和被动模式(Passive模式)。

17、FtpWebResponse类用于封装FTP服务器对请求的响应。该对彖提供操作的状态以及从服务器上下载的所有数据。通过调用该对象的GetResponse方法获取来FTP服务器的响应。

二、简答部分

1、试举例说明在程序中使用委托的基本步骤。

答:委托的使用要遵循以下的顺序:定义、声明、实例化、作为参数传递给方法、使用。

(1)定义委托使用关键字delegatee比如:

delegate void SomeDelegate(type 1 paral,type2 para2,...);

(2)声明委托:

SomeDelegate delegate;

(3)实例化:

delegate = new SomeDelegate(obj.InstanceMethod); 其中obj是对象,InstanceMethod是它的实例方法。

(4)用作某种方法的参数:

someMethod(delegate);

(5)在此方法的实现代码中使用:

private void someMethod(SomeDelegate someDelegate)

〃使用委托

2、什么编码和解码?为什么在通过网络传输数据时需要进行编码和解码?现有一个Unicode字符串mystring,欲将其编码后的字节序列存储到字节数组buff中,请写出相应的程序段。

答:编码:是指将一组字符转换为一个字节序列的过程。

解码:将一个编码字节序列转换为一组字符的过程。

因为通过网络传递的数据必须是字节序列。所以在发送数据前,需要通过编码把字符序列转换为字节序列后再发送;从网络上接收到数据Z后,需要通过解码把字节序列转换为字符组后再显示。比如:byte) ] buff = Encoding.Unicode.GetBytes(mystring);

3、简述使用套接字类Socket编写以同步方式工作的TCP服务器端程序的一般步骤。答:

同步TCP编写服务器端程序的一般步骤为:

1)创建一个包含采用的网络类型、数据传输类型和协议类型的监听套接字对象,使

用该套接字对象的Bind方法将该监听套接字对象与服务器的IP地址和端口号绑

定。

2)调用上一步创建的监听套接字对象的Listen方法,使得服务器在指定的IP地址

和端口上进行监听,以便接受客户端连接请求。

3)调用监听套接字对象的Accept方法等待客户端连接请求到达,一旦接受了客户端

的连接请求,就根据客户端发送的连接信息创建与该客户端对应的Socket 对象(连

接套接字对象)。

4)使

用连接套接字对象分别与每个连接的客户进行数据传输。

5)

据传送信息情况确定是否关闭与客户端通信的连接套接字对彖,以释放TCP 连

接。

4、简述使用TcpListen和TcpClient编写基于TCP的服务器端程序的一般步骤。答:使用TcpListen和TcpClient编写基于TCP的服务器端程序一般步骤为:

1)创

建一个TcpListener对象,然后调用该对象的Start方法在指定的端口进行监听。

2)在单独的线程中,循环调用TcpListener对象的AcceptTcpClient方法接受客户端

的连接请求,并根据该方法的返回的结果得到与该客户端对应的TcpClient对象。

3)每得到一个新的TcpClient对象,就创建一个与该客户对应的线程,在线程中与

对应的客户进行通信。

4)根据传送信息的情况确定是否关闭与客户的连接。

5、简述使用对套接字封装后的TcpClient类,编写基于TCP的客户端程序的一般步骤。答:使用对套接字封装后的TcpClient类,编写基于TCP的客户端程序的一般步骤如下:

1)利用TcpClient的构造函数创建一个TcpClient对象。

2)使用TcpClient对象的Connect方法与服务器建立连接。

3)利用TcpClient对彖的GetStream方法得到网络流,然后利用该网络流与服务器进

行数据传输。

4)创

建一个线稈监听指定的端口,循环接收并处理服务器发送过来的信息。

5)完成工作后,向服务器发送关闭信息,并关闭与服务器的连接。

6、利用TCP开发应用程序时,.NET框架提供了哪两种工作方式?这两种工作方式是如何工作的?

答:利用TCP开发应用程序时,.NET框架提供同步和异步两种工作方式。()

其屮:

1)同步工作方式指利用TCP编写的程序执行到发送、接收或监听语句吋,在未完成工作前不再继续往下执行,即处于阻塞状态,直到该语句完成相应的工作后才继续执行下一条语句。

2)异步工作方式是指程序执行到发送、接收或监听语句时,不论工作是否完成,都会继续往下执行。

7、基于事件的异步设计模式有什么特点?

答:基于事件的界步设计模式有以下特点:

1)用事件驱动模型实现异步方法,适用于绝大多数异步应用,降低了异步编程的复杂性。

2)具有多线程应用程序的优点,同时隐匿了多线程设计中固有的许多复杂问题。

3)在“后台”执行耗时任务(例如下载和数据库操作),但不会屮断应用程序。当后台任务完成吋,就自动触发对应的事件。

4)可以同时执行多个操作,毎个操作完成时都会接到通知。

5)后台等待资源时,不会停止(“挂起”)应用程序。

6)使用熟悉的事件和委托模型与挂起的异步操作通信。

7)

持基于事件的异步模式的类一般都有一个或多个后缀为“Async”的方法。该类还可

能有一个后缀为“CompletecT的事件,以及后缀为“AsyncCancel”(或只有

CancelAsync)的方法。

8、什么是网络流?网络流的基本操作有哪些?

答:网络流是指数据在网络的各个位置Z间以连续的字节形式传输。它用于通过网络套接字发送和接收数据,只用于面向连接的数据传输。

其基木操作主要有:

1)写入操作。指从来源端内存缓冲区到网络上的数据传输。

2)读

取操作。从网络上到接收端内存缓冲区(如字节数组)的数据传输。

3)关闭操作。关闭网络流对象。

9、通过实例简要回答利用UdpClient加入和退出组播组的步骤。设使用的UdpClient 对象名字为:multicast,多播组地址为:224.100.100.100,端口号为8888。

答:(1)加入组播组的步骤:创建UdpClient对象,然后使用JoinMulticastGroup方法将UdpClient对象和TTL 一起加入组播组。

例如:

〃创建UdpClient的实例并设置使用的本地端口号

UdpClient multicast = new UdpClient(8888);

multicast.JoinMulticastGroup(IPAddress.Parse("224.100.100.100"));

或者:

UdpClient multicast = new UdpClient(8888);

multicast.JoinMulticastGroup(IPAddress.Parse("224.100.100.100"), 50);

〃其中50为TTL值。

(2)退出组播组的步骤:

利用UdpClient的DropMulticastGroup方法,可以退出组播组。参数中指岀要退岀的多路广播组的IPAddress实例。UdpClient从组中收回之后,将不能再接收发送到该组的数据报。例如:

multicast.DropMulticastGro up(IPAddress.Parse("224.100.100.100"));

10、简述被动模式下,FTP客户端和FTP服务器的工作流程。

答:表示服务器被动接受客户端连接请求,即控制连接请求和数据连接请求都由客户端发起。其工作流程如下:

1) F

TP客户端先随机开启一个端口N向服务器的21号端口发起控制连接,然后向服

务器发送PASV命令;

2)服务器收到此命令后,会用一个新的端口P (P>1024)进行监听,同时将使用的IP

地址和该端口号告诉客户端;

3)客户端收到服务器端的响应后,再通过新的端口N+1连接服务器的端口P,建立

起数据连接,然后在该连接上进行文件数据传输。

11、简述说明利用HTTP实现多线程文件下载的方法。(请参考实验10)

答:利用HTTP实现多线程文件下载的方法如下:

(1)检查网络资源是否有效

利用HTTP的HEAD方法,根据标头返冋的状态码,即可确定资源的可用性。()

(2)获取下载文件的总长度

通过HTTP标头字段中的ContentLength,可以得到文件的总长度。而该字段可以通过HttpWebResponse 的ContentLength 屈性读取。

(3)下载指定范围内的数据

HttpWebRequest提供了一个AddRange方法来指出下载文件数据的范围。该方法的用法

AddRange(StartPosition,EndPosition);

其中:StartPosition为被下载数据的起始位置,EndPosition为被下载数据的终止位置,单位均为字节。

12、简述在VS2010开发环境下,编写程序发送电子邮件需要用到哪些类?这些类的作用是什么?

答:在VS2010下,编写程序发送邮件需要用到NetCredentials类、SmtpClient类、Attachment 类、MailAddress 类、MailMessage 类以及System.Mail.Mine 命名空间卜的类。

1)N

etCredentials类提供客户端身份验证的凭据。

2)A

ttachment类表示邮件的附件信息。

3)M

ail Address类表示邮件的发件人地址和收件人地址。

4)M

ailMessage类表示邮件的信息,包括主题、编码等。

5)S

mtpClient类实现了邮件的同步发送和异步发送。

三、程序设计部分

1、有一个利用多播来实现的网络会议室程序。该通信程序使用的端口号保存在变量port 中,使用的多播地址保存在变量MultiCastIP中。协议的设计如下:

?每个报文由:v命令>,<参数〉构成。

?用户名中不得岀现“,

?命令对字母的大小写敏感。

?报文格式列表如下:

a)Login:用户进入会议室。格式:Login,o所有接收到木报文的主机应该发

送一个List报文。

b)List:向组中用户发送本机已知加入到多播组的用户。格式:

List,,,…

c)Logout:用户退出会议室。格式:Logout,o所有接收到本报文的主机,应该

把该用户从已登录用户中删除。

d)Message:发言消息。格式:Message,,<消息>。当用户在发言文本框中

按下冋车后,产生该报文来把用户输入的消息发送给其它用户。

请写出接收消息线稈的代码。(请参考实验8聊天室部分,需要记住)

2、有一个使用FtpWebRequest^ FtpWebResponse等类来实现的FTP客户端程序。其

(1)CreateFtpWebRequest用于根据传递过来的参数,构建一个FtpWebRequest对象,函数的原型为:

private FtpWebRequest CreateFtpWebRequest(string uri, string requestMethod)o

uri:要访问的资源

requestMethod:发送到服务器的命令

返冋值为构造好的FtpWebRequest对象。

(2)GetFtpResponse函数则用于执行FtpWebRequest对象中所包含的命令。函数原型为:

private FtpWebResponse GetFtpResponse(FtpWebRequest request)

编写一个程序以实现把文件上传到FTP服务器上。

(请参考实验11中的buttonUpLoad_Click过程,需要记住)

3、设计并实现一个基于流式套接字的点到点控制台通信的客户端程序。该程序使用的变量和常量已定义如下:(请参考实验5客户端程序部分,会写代码)

Socket sock; 〃套接字实例

IPEndPoint ipe; //用于存储服务器端的IP地址和端口号

int myport = 2000; 〃服务器监听的端口号为2000

string ipa; //用于从键盘接收用户输入的服务器端的IP地址

string msg; //保存接收到的服务器端发来的信息

int msglen; 〃服务器发来信息的字节长度

该程序的工作流程如下:

(1)从键盘接收用户输入的服务器的IP地址,创建套接字实例,然后连接到服务器。

(2)与服务器方进行通信。

a)接收服务器发来的消息,转换成字符串后,在屏幕输出

b)从键盘接收用户的输入,若用户输入的不是“quit”,则把用户的输入的内容发

送给服务器

c)重复步骤a)和步骤b),直到用户输入“quit”或者服务器关断连接为止。

4、设计并实现一个基于UdpClient对象的点到点控制台通信程序。要求如下:

(1)该程序接收消息使用的端口号为8888。

(2)程序从键盘上接收用户的输入行,输入行的结构为:

,<消息〉

?若“,”之前为IP地址,则表示把消息发送给由IP地址指岀的主机,目标端口号为8888;

?若“,”之前为“quit”,则表示退出程序;其它情况则要求用户重新输入。(3)程序把接收到的消息在控制台显示出来。

(会写代码)

相关主题
相关文档
最新文档