下面的程序是选择性重复协议,用于传输随机生成的帧,有时在传输帧时会出现错误。帧总数、窗口大小和帧长度由用户动态给出。如果窗口大小为 3 且帧数为 7,则协议发送第一个生成的三帧,并在接收到第一三帧后发送接下来的三个生成位,最后剩余的第 7 帧在接收到先前发送的帧后发送。然后在完成传输后,收到确认。如果发送第 2 帧有错误,只有在第 2 帧重传后,才会发送下一组三帧。如果帧长度为 4 ,则每帧将有 5 位(帧长度 + 一个奇偶校验位)
%while(b==1)
clc;
m=input('Enter the total no of frames:');
n=input('Enter the window size:');
t=input('Enter the length of frames:');
disp(sprintf('\n'));
while(m~=0)
if(m<n)
n=m;
end
for i=1:1:n;
d=randint(1,t);
d(t+1)=rem(sum(d),2);
a(i,1:t+1)=d;
disp(sprintf('Transmitting frame %d :',i));
disp(a(i,1:t+1));
end
p=randint(1,1,[1,n]);
q=randint(1,1,[1,t+1]);
a(p,q)=randint(1,1);
for i=1:1:n
fprintf('Received frame %d:',i);
disp(a(i,1:t+1));
end
f=zeros(1,n);
for i=1:1:n
f(i)=rem(sum(a(i,1:t+1)),2);
if(f(i)==1)
p=i;
end
end
if(f==0)
fprintf('ACKNOWLEDGEMENT RECEIVED\n');
else
fprintf('Frame%d is REJECTED\n',p);
disp('RETRANSMITTING....');
a(p,q)=~a(p,q);
for i=p
fprintf('Received frame %d:',i);
disp(a(i,1:t+1));
end
end
m=m-n;
end
该程序的输出
Enter the total no of frames:5
Enter the window size:3
Enter the length of frames:4
Transmitting frame 1 :
1 1 0 1 1
Transmitting frame 2 :
1 0 0 1 0
Transmitting frame 3 :
1 1 0 1 1
Received frame 1: 1 1 0 1 1
Received frame 2: 1 0 0 1 0
Received frame 3: 1 1 1 1 1
Frame3 is REJECTED
RETRANSMITTING....
Received frame 3: 1 1 0 1 1
Transmitting frame 1 :
0 0 1 1 0
Transmitting frame 2 :
1 1 0 1 1
Received frame 1: 0 0 1 1 0
Received frame 2: 1 1 0 1 1
ACKNOWLEDGEMENT RECEIVED
>>
我需要将随机生成的帧更改为用户动态,并且对帧的长度没有限制(想要输入不同长度的帧)