现在,我正在尝试编写一个简单的TCP客户端/服务器程序,该程序可以测量以太网LAN上的RTT。但是,我在使用以下功能时遇到了一些麻烦:
void iteratedSend(int iterations, int msgSize, bool useRTT){
printf("started iteratedSend for size %d\n",msgSize);//DEBUG STATEMENT 1
int i;
double elapsedTime = 0;
for(i = 0; i < iterations; i++){
printf("iteration %d", i);//DEBUG STATEMENT 2
elapsedTime += timeMessage(msgSize, true);
}
if(!useRTT)
elapsedTime = elapsedTime / 2.0;
double throughput = (msgSize * iterations) / elapsedTime;
printf("Message Size: %d bytes Elapsed Time: %f ms Throughput: %f Bps\n" ,
msgSize, elapsedTime, throughput);
fprintf(outputFile, "Message Size: %d bytes Elapsed Time: %f ms Throughput: %f
Bps\n" , msgSize, elapsedTime, throughput);
fprintf(dataFile, "%.3d , %.3f\n" , msgSize, throughput);
}
奇怪的是,打印了标记为“DEBUG STATEMENT 1”的代码行,因此函数成功启动,但是从未打印语句“DEBUG STATEMENT 2”,并且循环从未执行。发生这种情况时,我的客户端和服务器将无限期挂起。
当执行以下代码行时,发生此挂起的位置为main:
iteratedSend(1, 1024000,false);
关于究竟发生了什么的任何想法?对我的C代码中任何违反惯例的行为提前道歉; C对我来说仍然是一种新语言。
谢谢!