繁体   English   中英

虽然循环没有正确迭代

[英]While Loop Not Iterating Correctly

我正在研究一个计算机网络项目,以模拟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 

这是我得到的输出:

FRAME:STX102000000000127.0.0.1000000000000000abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd1eb5ETX

FRAME:STX101010000000127.0.0.1000000000000000efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi1f1bETXSTX

FRAME:101020000000127.0.0.1000000000000000jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmn1f35ETXSTX0

框架:85031000000127.0.0.1000000000000000opqrstuvwxyzabcdefghijklmnopqrstuvwxyzab 184aETX

第一帧很好。 第二帧不应该在末尾有STX。 第三帧不应该有STX和0。 第四帧应该在前面有一个STX和0:/

对于每个人说k> 0是他的问题,这可能是正确的,但这不是他的主要问题。 即使k> 0,他的问题也在发生,因为他说它发生在帧之间。 一旦发送了最后一帧,那么当k> 0循环生效时。 它与内部while循环有关。

它可能是这个循环:

k = strlen(ap);

while(k >= 0){     //This is where I start collecting frames
    ...
    k--; //Decrement the amount of characters left in the total package 
}

请注意,它从长度下降到包括0.这是循环的长度+ 1倍。

尝试用以下方法替换你的while条件:

while(k > 0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM