有噪声信道的单工协议
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有噪声信道的单工协议
实验内容:
有噪声信道的单工停等协议的实现。
实验目的:
了解数据链路层协议的基本原理;
掌握数据链路层的基本流量控制和差错控制的实现方法;
掌握有噪声信道的单工停等协议的工作过程。
实验要求:
选用任一编程工具和编程语言实现;
使用发送端程序和接收端程序实现数据的可靠传输。
实验原理:
在有噪声信道中的数据传输可能由于不确定的原因造成传输数据的丢失,包括发送方发出的信息和接受方返回的确认帧。而在有连接有确实的数据传输过程中要求数据正确无误的传送的接受方,所以在数据链路层的协议上对于各种数据的损坏或丢失都要进行更正。本实验演示了该协议在各种状况(数据丢失,确认丢失,数据延迟)下的处理方式。
原程序:
import java.awt.*;
import java.awt.event.*;
class Thread1 extends Thread{
int tim;
Button b;
Frame f;
Thread1(int t,Frame fra){
tim=t;
b=new Button("0");
b.setForeground(Color.blue);
b.setBounds(10,30,40,30);
f=fra;
f.add(b);
}
public void run(){
if(tim==10){
for(int j=0;j try{sleep(100); }catch(InterruptedException e){} b.setBounds(10+5*j,30+20*j,40,30); } b.setLabel("丢失"); try{sleep(1000); }catch(InterruptedException e){} f.remove(b); } if(tim==20){ for(int j=0;j<20;j++){ try{sleep(100); }catch(InterruptedException e){} b.setBounds(10+5*j,30+20*j,40,30); } b.setLabel("1"); for(int j=0;j<20;j++){ try{sleep(100); }catch(InterruptedException e){} b.setBounds(100+5*j,400-20*j,40,30); } try{sleep(1000); }catch(InterruptedException e){} f.remove(b); } if(tim==40){ for(int j=0;j<20;j++){ try{sleep(100); }catch(InterruptedException e){} b.setBounds(10+5*j,30+20*j,40,30); } b.setLabel("1"); for(int j=0;j<10;j++){ try{sleep(100); }catch(InterruptedException e){} b.setBounds(100+5*j,400-20*j,40,30); } b.setLabel("丢失"); try{sleep(1000); }catch(InterruptedException e){} f.remove(b); } if(tim==50){ for(int j=0;j<20;j++){ try{sleep(100); }catch(InterruptedException e){} b.setBounds(10+5*j,30+20*j,40,30); } b.setLabel("等待"); try{sleep(2000); }catch(InterruptedException e){} b.setLabel("1"); for(int j=0;j<20;j++){ try{sleep(100); }catch(InterruptedException e){} b.setBounds(100+5*j,400-20*j,40,30); } try{sleep(1000); }catch(InterruptedException e){} f.remove(b); } } } class Thread2 extends Thread{ int tim; Button b; Frame f; Thread2(int n,Frame fra){ tim=n; b=new Button("0"); b.setBounds(200,30,30,20); b.setForeground(Color.blue); f=fra; } public void run(){ try{sleep(40*100);