0

私は、TCp/IP モデルをシミュレートするためのコンピューター ネットワーク プロジェクトに取り組んでいますが、非常に奇妙な問題が発生しています。非常に単純ですが、コードの何が問題なのかわかりません。以下の送信関数内には、新しいフレームを収集するたびにクリアされるバッファに個別のフレームを収集する while ループがあります。問題は、while ループが次のフレームから前のフレームに 1 つの余分な変数を収集していることです。どんな助けでも大歓迎です!

void transmit(char *ipaddress){
char mode;
char *ap = calloc(MAX, sizeof(char));   //Arrays used to transfer data from each layer
char *Frame = calloc(MAX, sizeof(char));
mode = 's';
int i = 0, k = 0, j = 0;
ap = layer4(ap);    //Each layer returns data that is stored
ap = layer3(ap, ipaddress); 
ap = layer2(ap);
k = strlen(ap);
printf(" APLENGTH %d", k);

while(k >= 0){     //This is where I start collecting frames
        memset(Frame,0,strlen(Frame));
        while(ap[i] != 3 && ap[i+1] != 2){ //Stop if ETX followed by STX
        Frame[i] = ap[j]; 
//printf("%d, Frame[%d]: %c",j,i,Frame[i]); This was for debugging. 
        i++; j++; 
        k--; //Decrement the amount of characters left in the total package 
    }
    Frame[i] = ap[j]; //Append the last ETX bit to complete frame 
//  printf("\n"); 
    //printf("%d, Frame[%d]: %c",j,i,Frame[i]);
    i++,j++;
    Frame[i] = '\0'; //Append terminate character
    //      printf("%d, Frame[%d]: %c",j,i,Frame[i]);

    i = layer1(Frame, mode);
        printf("FRAME: %s\n\n",Frame);
    if(i != 0){
        printf("Terminating Program");
        exit(1); }
        i = 0;
}

//ap = layer1(ap, mode);

} //Trasmit Layer 

これが私が得る出力です:

フレーム: STX102000000000127.0.0.1000000000000000abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd1eb5ETX

フレーム: STX101010000000127.0.0.1000000000000000efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi1f1bETXSTX

フレーム: 101020000000127.0.0.1000000000000000jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmn1f35ETXSTX0

フレーム: 85031000000127.0.0.1000000000000000opqrstuvwxyzabcdefghijklmnopqrstuvwxyzab 184aETX

最初のフレームは問題ありません。2 番目のフレームには、最後に STX があってはなりません。3 番目のフレームには、最後に STX と 0 があってはなりません。4 番目のフレームには、前面に STX と 0 が必要です:/

4

3 に答える 3

2

k>0 が彼の問題だと言っている人には、それは正しいかもしれませんが、それは彼の主な問題ではありません。彼の問題は、フレーム間で発生すると彼が言ったように、k>0の場合でも発生しています。最後のフレームが送信されるとすぐに、k>0 ループが有効になります。内側の while ループに関係しています。

于 2013-04-17T20:18:29.473 に答える
0

while 条件を以下のものに置き換えてみてください。

while(k > 0)
于 2013-04-17T20:12:04.283 に答える