以下のプログラムは、ランダムに生成されたフレームを送信するための選択的リピートプロトコルであり、フレームの送信でエラーが発生する場合があります。フレームの総数、ウィンドウサイズ、フレームの長さは、ユーザーが動的に指定します。ウィンドウサイズが3で、フレーム数が7の場合、プロトコルは生成された最初の3フレームを送信し、最初の3フレームを受信した後、次の3つの生成ビットを送信し、最後に残りの7番目のフレームは以前に送信されたフレームを受信した後に送信されます。送信が完了すると、確認応答が受信されます。2番目のフレームの送信でエラーが発生した場合、2番目のフレームでの再送信後にのみ、次の3つのフレームのセットが送信されます。フレームの長さが4として指定されている場合、各フレームは5ビット(フレームの長さ+ 1パリティビット)になります。
%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
>>
ランダムに生成されたフレームをユーザーが動的に変更する必要があり、フレームの長さに制限はありません(異なる長さのフレームを入力したい)