• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: C/C++
  • 标签:

资源简介

停止等待协议的工作机理,并实现给出的协议算法。根据给出的停止等待协议的算法描述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


评论

共有 条评论

相关资源