资源简介
停止等待协议的工作机理,并实现给出的协议算法。根据给出的停止等待协议的算法描述c语言实现
代码片段和文件信息
#include
using namespace std;
void recive(int i);
int readydir;//ready =1就绪信号,dir = 1方向
int vs =0;
int vr =0;
int count =0;
struct buffer//数据缓冲区
{
int pre;
int NR;
int data;
int FCS;
int EOT;
int ACK_NAK;
};
buffer buf;
struct sframe//发送方的帧格式
{
int pre;
int NR;
int data;
int FCS;
int EOT;
};
sframe s[10];
struct rframe//接收方的帧格式
{
int pre;
int Ns;
int ACK_NAK;
int FCS;
int EOT;
};
rframe r[10];
int getdata[10]check;
int CRC(int i)//检验函数
{
switch(i){
case 0: return 0;break;
case 1: return 6;break;
case 2: return 2;break;
case 3: return 3;break;
case 4: return 4;break;
}
}
void initial()//初始化数据帧
{
for(int i =0; i<=9; i++)
{
s[i].pre = 0;
s[i].EOT =00000100 ;
s[i].data = i;
s[i].FCS = i;
}
for(int j=0; j<=9;j++)//初始化
{
getdata[j] = 0;
}
ready = 0;
}
void send()
{
int i =0; vs =0;
int n second = 0;
int counter =0;
while(i <= 4)
{
cout<<“数据已发送到缓冲区!“< buf.data = s[i].data;
buf.EOT = s[i].EOT;
buf.FCS = s[i].FCS;
buf.NR = s[i].NR;
buf.pre = s[i].pre;
s[i].NR = vs;
cout<<“等待接收数据!“< cout<<“...“< for(int k =0; k<1000; k++)
for(int k1 =0; k1<1000;k1++)
for(int k2 =0; k2<500; k2++)
ready = 1; dir = 1;
if( i == 3)
n = 2001;
else
n = 10;
for(int j =0; j counter++;
if(counter <2000 || second == 1)
{
recive(i);
if(ready ==0 && dir ==0)
{
r[i].ACK_NAK = buf.ACK_NAK;
if(r[i].ACK_NAK == 1)//发送成功,发送下一个
{
cout<<“等待接收确认帧/否认帧“< cout<<“...“< vs = 1 - vs;
cout<<“发送成功,准备发送下一个!“< cout<<“----------------------------“< i++;
}
else if(r[i].ACK_NAK == 0 )//出现差错重新发送
{
cout<<“等待接收确认帧/否认帧“< cout<<“...“< cout<<“出现差错,需要重新发送“< cout<<“--------------------------------“< }
else if(r[i].ACK_NAK == 2)
{
cout<<“数据丢失需要重新发送“< cout<<“-------------------------------“< }
}
}
else if( counter >= 2000)
{
cout<<“超时!需要重新发送!“< cout<<“------------------------------“< second ++;
}
}
}
void recive(int i)
{
if(ready ==1 && dir ==1)
{
getdata[i] = buf.data;
if(i == 2)
{
if(vr ==1)
vr =0; else vr =1;
}
check = buf.FCS;
if(s[i].NR != vr)//对方的消息丢失
{
cout<<“消息丢失,发送确认帧/否认帧“< buf.ACK_NAK = 2;
s[i].NR = vr;
ready =0;
dir =0;
count++;
}
else if(check == CRC(i)||count ==1)//正确发送确认帧
{
ready =0;dir =0;
cout<<“发送确认帧/否认帧“< cout<<“接收到的信息是: “< buf.ACK_NAK = 1;
vr = 1- vr;
s[i].NR = vr;
}
else if(check != CRC(i))//对方的消息有传输错误
{
cout<<“错误,发送确认帧/否认帧“<<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3383 2011-05-25 14:19 ARQ.cpp
----------- --------- ---------- ----- ----
3383 1
- 上一篇:QUEUE.CPP
- 下一篇:扫雷游戏源程序 c++课程设计必备
评论
共有 条评论