0

以下のプログラムは、ランダムに生成されたフレームを送信するための選択的リピートプロトコルであり、フレームの送信でエラーが発生する場合があります。フレームの総数、ウィンドウサイズ、フレームの長さは、ユーザーが動的に指定します。ウィンドウサイズが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
>> 

ランダムに生成されたフレームをユーザーが動的に変更する必要があり、フレームの長さに制限はありません(異なる長さのフレームを入力したい)

4

1 に答える 1

0

私の理解では、各フレームをユーザーが入力する必要があり、1つのフレームの長さが次のフレームと異なる場合があります。

この場合、次のコードを使用できます。

clear;
close;
clc;

m=input('Enter the total no of frames:');
n=input('Enter the window size:');
a=-ones(n,1);
max=0;
disp(sprintf('\n'));

while(m~=0)
    if(m<n)
        n=m;
    end

    for i=1:1:n;
        while(1)
            d=input('Enter a frame: ');    %To be input as, for example, [0 1 1 0]
            if((size(d,1)~=1 && size(d,2)~=1) || length(size(d))~=2)
                disp('Invalid input! Frame must be an one dimensional array. Try again.');
                continue;
            else
                break;
            end
        end
        t=length(d);
        if(t>max)
            max=t;
            a_temp=-(ones(n,t+2));
            a_temp(1:size(a,1),1:size(a,2))=a;
            a=a_temp;
        end
        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=[find(a==1);find(a==0)];
    q=ceil(rand()*length(p));
    if(q==0)
        q=1;
    end
    a(q)=randint(1,1);

    for i=1:1:n
        t=find(a(i,:)==-1,1)-2;
        fprintf('Received frame %d:',i);
        disp(a(i,1:t+1));
    end

    f=zeros(1,n);
    for i=1:1:n
        t=find(a(i,:)==-1,1)-2;
        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(q)=~a(q);
        for i=p
            t=find(a(i,:)==-1,1)-2;
            fprintf('Received frame %d:',i);
            disp(a(i,1:t+1));
        end
    end

    m=m-n;
end

編集

dこれには前の質問のからが必要です。前の質問のdを他の何か、たとえば、に置き換えますd_indices

j=1;前のコードの最後に行を追加します。

次に、この現在のコード(なしclear)を前のコードの最後に追加し、次の変更を加えます。

  1. に置き換えm=input('Enter the total no of frames:');ますm=length(d_indices)-1;
  2. に置き換えd=input('Enter a frame: ');ます
j=j+1;
if(j>length(d_indices)
    break;
end
d=x((d_indices(j-1)+1):d_indices(j));

まだ試していませんが、行ってもいいはずです。

于 2013-03-27T04:09:04.857 に答える