计算机网络实验指导实验二利用停止等待协议传输数据文件_第1页
计算机网络实验指导实验二利用停止等待协议传输数据文件_第2页
计算机网络实验指导实验二利用停止等待协议传输数据文件_第3页
计算机网络实验指导实验二利用停止等待协议传输数据文件_第4页
计算机网络实验指导实验二利用停止等待协议传输数据文件_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络实验指导实验二利用停止等待协议传输数据文件一、实验目的深入理解停止等待协议的主耍特点;深入理解停止等待协议的工作过程;进一步掌握串行口编程的方法。二、实验环境该实验可以看成是前一实验的扩展和深入,它要求在串行口上利用停止等待 协议实现文件的可靠传输,因此,实验需要的实验环境与实验一(异步串行通信 实验)完全相同。其所需设备、器件及电缆的制作和设备的连接方法可参阅实验 一的实验手册。三、实验概述1. 停止等待协议图21停止等待协议的基木工作过程图2-2数据包的丢失和确认信息的丢失示意图所谓停止等待就是在发送方发完数据报后,需要等待接收方应答信息的到来。如果发送方接收到正确认信息ack,

2、那么说明接收方已经正确接收到上一 数据包,发送方就可以发送下一数据包;如果发送方接收到负责确认信息nak, 说明接收方收到的数据包是错误的,发送方应该重发,如图21所示。为了保证数据传输的可靠性,实际的停等协议并不像上述的那么简单。在实 际应用环境中,至少应该考虑以下两种情况。(1)数据包丢失数据包在传输过程屮丢失,接收方未收到任何数据,如图2-2所示。由于 接收方不知道数据已经发送,因此它不可能给出正确认(ack)信息或负确认信息 (nak)信息。为了解决这个问题,发送方需要在发送一个数据包后启动一个 定时器。一旦在规定时间内没有收到接收方的任何信息,则认为数据包丢失,需 要重发该数据包。如

3、果重传一个数据包的次数达到一定值,则认为数据通信信道 存在严重问题,数据传输失败。(2)确认信息丢失或出错接收方正确接收到数据包,但确认信息在传输过程中丢失或出错,如图2 2所示。这时发送方也不能确定接收方是否收到了数据包。这个问题的解决也是 采用定时器的方法,在定时器溢出后重发数据包。但是为了保证接收到的数据不 重复,需要给数据包编号。当接收方再次收到同样编号的数据包时,将该包丢弃, 并认为上次发送的确认信息丢失或出错,需要重传该确认信息。对于停等协议, 至少需要两个编号(通常为0和1 )。第一个包的编号为0,第二个包的编号为1, 笫三个包的编号再为0如果接收方连续收到了相同编号的数据包,则

4、发生了 重复,需要将其丢弃。同时确认信息也需更进行编号,通常用ack1表示收到 编号为0的数据包,并准备接收编号为1的数据包。同样的,ack0则表示下一 个准备接收到的数据包的编号为0o2. 停止等待协议实例bscbsc是一种典型的面向字符型停止等待协议,它使用了 ascii码屮的10个 控制字符完成通信控制功能,并规定了数据报文、控制报文的格式以及协议的操 作过程。由丁规程简单、容易实现,比较适宜在中低速网络(如电话网)中使用。控制字符:bsc协议中使用的控制字符的符号、名称、ascii编码及功能说明如表2-1所不。表2-1 bsc协议屮使用的控制字符与功能符号名称ascii编码功能说明so

5、h序始01h数据报文终屮报头的开始stx文始02h数据报文中正文的开始etx文终03h数据报文屮正文的结束eot送毕04h传输结束enq询问05h询问对方并请求对方予以响应ack正确认06h接受方正确接受报文后的响应nak负确认15h接收方接收数据报文错误的响应dle转义10h修改紧随其后的字符的语义syn同步16h收发双方的字符同步etb组终17h成组传输时的组结朿标记报文格式bsc协议规定了数据报文格式和控制报文格式。数据报文格式如图2-3所示,其中syn为同步字符,接收方在收到2个以 上的syn后就可以进入数据报的接收状态。报头字段由soh开始,它是一个可 选项,可由用户自己定义,用于存

6、放地址、路径、发送h期等信息。正文字段由 stx开始,其正文字段的长度未作具体规定。如果正文太长,要将其分成几块 传输,每块用etb结朿正文字段。当全部正文传输结朿后,需耍用etx结朿正 文字段。bcc为校验字段。在bsc'p,既可以使用奇偶校验,也可以使用crc 校验。synsynsoh报头stx正文etb/etxbcc图2-3 bsc数据报文格式控制报文格式比较简单,基木上是使用一些控制字符序列的组合。经常使用 的控制报文如表2-2所示。表2-2 bsc常用控制报文及控制字符序列控制报文控制字符序列控制报文控制字符序列确认syn syn 0/1ack询问syn syn enq否认s

7、yn syn nak传输结束syn syn eot透明数据传输在面向字符协议数据报文中,数据是以字符为单位组成的。在止文数据中完 全可能出现与控制字符代码相同的数据字符,这就会造成误解。例如,正文中也 可能出现与文终字符etx的代码相同的数据字符。如果不进行特殊的处理,接 收方会误认为是正文结束。为了解决这个问题,bsc定义了转义字符dle。当正文出现与控制字符编 码相同的数据字符时,耍在数据字符前增加一个dleo这样,接收方在收到一 个dle后就可以预知下一个字符是数据字符,而不会把它当作控制字符进行处理。dle本身也是控制字符,当它出现在正文中时,也需要增加dle。 bsc协议的执行过程b

8、sc协议执行过程大致可以分为数据链路建立阶段、数据传输阶段和数据 链路拆除阶段。在正式发送数据之前,发送方通过发送enq询问接收方是否同 意建立链路,进而进行数据传输。接收方如果同意则向发送方返回ack信息; 否则返回nak信息。在数据链路建立之后,发送方就可以向接收方发送数据报文。接收方根据接 收到数据报文携带的bcc字段来判定数据报文是否接收正确。如果正确则返冋 ack信息;否则返回nak信息,要求发送方重传。数据传输完成z后,发送发 通过发送eot拆除链路。3. 简化的停止等待协议实验在不彩响停i上等待协议基本思想的前提下进行简化,以简化编程过程。 简化的停止等待协议只使用stx、etx

9、、eot、enq、ack和dle6个控 制字符,数据报文的格式如图24所示。stx编号0/1正文bccetx图24简化的停止等待协议数据报文格式每个报文以stx开始,以etx结朿。报文编号0或1位于stx z后。正 文为可变长度区域,通常为256、512、1024、2048字节等。bcc是对正文字段 的奇偶校验码。需要发送信息的一方以enq请求建立链路。当收到接收方的ack0后,发 送发就可以开始发送数据报文。接收方在收到一个数据报后,对其编号利bcc 进行检查,如杲正确则返冋ack0 (或ackdo如杲错误则抛弃该数据报,等 待发送方超时后重新发送该报文。在所有的数据发送完成斤,发送方发送e

10、ot 信息,结束木次通信。四、实验内容与步?木实验将实现一个基于串行口的文件传输程序。它可以通过串行口将用户指 定的文件从一台计算机发送至另一台计算机,具界面示意图如图25所示。由丁木实验要在串口上实现停等协议,因此实验一介绍的有关串口上的数据 收发函数和过程也适用于本实验。此外,在本次实验中需要注意以下问题:1. 日志列表该编程实验的主要a的是深入理解停止等待协议的主要特点和工作过程。 因此在程序界面的设计中一定要留有日志位置,以记录发送和接收的整个过程,如图25所示。图2-5利用停止等待协议实现文件传输程序界面示意图2. 日志列表该编程实验的主要r的是深入理解停止等待协议的主要特点和工作过

11、程。 因此在程序界面的设计中一定要留有h志位置,以记录发送和接收的整个过程, 如图2-5所示。3. 发送和接收文件的选择选择需要发送的文件或指定需耍存储的文件可以使用cfiledialog类。 cfiledialog类的使用方法如下:构造cfiledialog类对象。cfiledialog类的构造函数如下:explicit cfiledialog (bool bopenfiledialoglpctstr ipszdefext=nulllpctstr 1 pszfi lename=nulldword dwflags=ofn_h!dereadonlyi ofn_overwr1teprompt lp

12、ctstr lpszfilter=nullcwnd* pparentw nd=n ulldword dwsize=0);其中各参数主要含义如卜:bopenfiledialog如果设置为true,那么将构造“打开”对话框;如果设置 为false,那么将构造“保存为”对话框;lpszdefext指定默认的扩展名,如 果用户在文件名编辑对话框中没有指定扩展名,那么ipszdefext将自动添加到文 件名之后。如果不希望系统自动添加扩展名,则将该参数置为null; ipszfilename为对话框中初始显示的文件名;dwflags由一个或者多个标志组成, 用于对话框的定制,例如标志0fn_hidere

13、adonly告诉系统在显示文件列表 时隐藏只读文件;ipszfilter文件名过滤器,用于指定显示在文件列表中的文件类 型;pparentwnd指向对话框父窗口的指针;dwsize将由mfc选择合适的值,用 户将其值设置为默认值0即可。调用cfiledialog类的成员函数domodal显示对话框。如果domodal函数返回值为idok,那么可以通过成员函数getpathname 得到选择或指定文件的完整路径名和文件名。4. 磁盘文件操作可以采用多种不同的方法对磁盘文件进行读写操作,其中最常用的是利用 cfile类。cfile类拥有open、read、write> close等成员函数,

14、通过这些成员 函数可以对磁盘文件进行读写操作。cfile类的一种主要的使用使用方法如下:构造cfile类对象。调用cfile类成员函数open打开某一特定的文件并指定打开的方式和类 型。成员函数open的原型如下:virtual bool open (lpctstr ipszfilenameunit nopenflagscfileexception* perror = null);具中ipszfilename为指定需耍打开文件的文件名和其路径;nopenflags定 义打开文件的共享模式和存取模式。这些模式可以通过一系列的标志进行定义, 如moderead为只读模式、modcwrite为只写模

15、式、modereadwrite为读写模式、 typetext指定文件以文本方式打开、typebinary指定文件以二进制方式打开。这 些标志可以通过i进行组合,用于指定两种以上的模式。在成功打开文件后,利用read和write成员函数对文件进行读写操作。 read和write的原型如卜:virtual unit read (viod * lpbuf);virtual viod write (const void * lpbufunit ncount);在read和write函数屮,各参数的意义如下:lpbuf指向用于存储读岀数据 (写入数据)的缓冲区;ncount指明在本次操作中可以读取(写入)的最多字 节数。在对打开的文件进行操作时,read函数将返回本次操作实际读取的字节 数,而write函数在发生错误(如磁盘满等)时将显示一个例外。关闭文件。在完成文件的读写后,需要调用cfile的成员函数virtual void close ()将文件关闭。五.思考与练习在实

温馨提示

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

评论

0/150

提交评论