可靠的数据传输协议rdt的模拟实现.doc

可靠的数据传输协议rdt的模拟实现.doc

ID:58665770

大小:153.50 KB

页数:8页

时间:2020-10-15

可靠的数据传输协议rdt的模拟实现.doc_第1页
可靠的数据传输协议rdt的模拟实现.doc_第2页
可靠的数据传输协议rdt的模拟实现.doc_第3页
可靠的数据传输协议rdt的模拟实现.doc_第4页
可靠的数据传输协议rdt的模拟实现.doc_第5页
资源描述:

《可靠的数据传输协议rdt的模拟实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、可靠的数据传输协议rdt的模拟实现姓名:陈锋学号:2005一、实验目的:加深对可靠的数据传输协议(包括链路层、传输层和应用层)的理解。二、实现的功能与要求2.1、功能(1)由一台PC(线程)向另一台PC(线程)发送数据包,界面应显示出双方帧个数变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送情况和接受情况,包括在相应窗口详细显示相应的ACK和其他收发数据帧后发出的消息,以表明模拟协议的正确运作过程。(2)接收方及发送方应具有按序收发帧的能力;(3)接受方应有固定大小的窗口,并对收到信息

2、缓存。当发送方速度过快或帧丢失(超时),接受方应发送消息,要求暂停或重传(停--等协议);(4)发送方发送速度应可以调节,并可以暂停或重发;(5)发送方重传时可仅重传需要的(丢失的)幀;(6)以上几个功能应可视,要求简单界面。2.2、要求(1)Windows或者UNIX环境下,对可靠的数据传输协议的简单实现,程序应在1-2台PC上运行,(2)演示在两台计算机间传输,允许在同一台机器中用两个独立线程来模拟。三、可靠数据传输协议rdt的传输原理下层信道是完美可靠的,没有bit错误,没有分组丢失。对发送方接收方具有独立的

3、FSMs,发送方发送数据到下层信道,接收方从下层信道接收数据。图1、可靠信道上的可靠传输整个协议的工作原理图如下:图2、可靠数据传输协议传输原理示意图四、实验流程图首先,启动服务器,调用Socket()建立一个套接口,然后用bind()将该套接口与本地网络地址绑定,再调用listen()使套接口做好监听的准备,规定请求队列的长度,在调用accept()来接收连接。客户在建立套接口后就可调用connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。

4、最后,待数据传送结束后,调用close()关闭套接口。实验流程图如下页图3所示。ServerSocket()Bind()Listen()Accept()ClientSocket()阻塞,等待建立连接Write()Write()Close()Close()Read()connect()请求数据Read()处理服务请求应答数据图3、Socket编程模拟实现rdt协议的流程图五、主要程序片段5.1重要的数据结构—classCRcvSocket和classCSndSocket类classCRcvSocket,用于服务器端的

5、Socket通信。classCRcvSocket:publicCSocket{//Attributespublic://Operationspublic:CRcvSocket();virtual~CRcvSocket();//Overridespublic:voidSetNotifyWnd(HWNDhNtf);voidSetNotifyMsg(UINTuMsg);private:HWNDhNotifyWnd;UINTuNotifyMsg;};类classCSndSocket,用于客户端的Socket通信classC

6、SndSocket:publicCSocket{//Attributespublic://Operationspublic:CSndSocket();virtual~CSndSocket();//Overridespublic:voidSetRcvNotifyMsg(UINTnMsg);UINTuRcvMsg;voidSetNotifyWnd(HWNDhNtf);private:HWNDhNotifyWnd;};5.2建立套接字不管是客户端程序,还是服务器端程序,都需要在运行的时候去建立套接字。唯一的区别是:服务器

7、端建立一个套接字,然后开始无限循环;每当它通过循环接收到一个连接,则打印出一个信息,客户端建立套接字,然后与命令行给出的套接字连接;连接结束时,在连接上发送 一个消息,然后关闭套接字。sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror(“opening stream socket”); exit(1); } 5.3在客户端中,使用命令行中指定的名字连接套接字server.sin_family = AF_INET; hp = gethostby

8、name(argv[1]); if (hp == 0) { fprintf(stderr, “%s: unknown host ”, argv[1]); exit(2); } memcpy((char*)&server.sin_addr, (char*)hp->;h_addr, hp->;h_length); sever.sin_port = htons

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。