0

我有一个奇怪的问题。我在android上做了以下测试:

我=0;
而(我< PACKET_NUMBER)
{

//UDP发送数据包
if( sendto(sockfd,buffer,strlen(buffer),0, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) <= 0)
{
error("通过udp向远程主机发送数据包失败\ n");
}
我++;
}

我用不同的缓冲区大小做了这个测试。当缓冲区大小小于一个数字(应该在 500 字节左右)时,无论我选择哪种大小,例如 20 40 80 160 320 ,while 语句都可以在几乎相同的时间内执行,例如 3 分 10 秒。但是,当数据包大小大于 500 时,例如 510 520 600 1280,while 语句的执行时间要长得多,例如超过 10 分钟。谁能给我一些关于原因的提示?

4

1 回答 1

1

事实上,这个问题很可能是由strlen()引起的,它试图在循环/0的每次迭代中查找缓冲区中的字符while()

将其替换为变量,执行速度会提高。

另一个可能的原因是数据包碎片。

于 2012-08-24T08:42:00.953 回答