我正在做一个计算机网络项目来模拟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

这是我得到的输出:
帧:stx1020000000127.0.0.10000000000000abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabd1eb5etx
帧:stx10100000000127.0.0.10000000000000efghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzabcdefghi1f1betxstx
帧:1010200000000127.0.0.10000000000000jklmnopqrstuvxyzabcdefghklmnopqrstuvxyzabcdefghijklmn1f35etxstx0
帧:85031000000127.0.0.10000000000000opqrstuvwxyzabcdefghijklmnopqrstuvwxyzab
184年
第一帧很好。第二帧的末尾不应该有STX。第三帧的末尾不应包含STX和0。第四帧的前面应该有一个STX和0:/

最佳答案

对每个人来说k>0是他的问题,这也许是对的,但这不是他的主要问题。他的问题甚至出现在k>0时,正如他所说的,它发生在帧之间。一旦最后一帧被发送,那就是k>0循环生效的时候。这与内部while循环有关。

关于c - While循环未正确迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16069217/

10-09 20:10
查看更多