我试图从客户端向服务器发送TCP数据包,我希望能够选择数据包的大小。问题是,如果我没有睡眠(45)(毫秒),数据包大小是不正确的。我使用Wireshark来查看数据包的大小。
为了确保你们和我在一起,我会尽可能清楚地解释。
我试过这样做..
首先,我选择要发送的数据量。例如,说1Mb或“1000000ish”字节。我分配了一个有如此多空间的数组。
为了能够发送特定的数据包大小,我已经分配了一个sendbuffer,它包含我想要的数据包的大小(我的情况是64,512,1024和1514字节)。我用信件填写sendbuffer。假设我想用64作为数据包大小发送。
for (int i = 0; i < packetSize; i++){
sendbuf[i] = 'a';
}
要知道有多少次我必须发送数据包达到1Mb,我就完成了这个数学运算 nrOfTimes =(dataSize / packetSize)。
然后用循环发送它。
for (int i = 0; i < nrOfTimes; i++) {
rc = send(sConnect, sendbuf, packetSize, 0); //rc and sConnect contains information where to send the data, if you wonder
Sleep(45); // If i dont use this the packet size gets 1514.
}
如果我使用睡眠(45)它的工作,但它需要数年才能完成,我应该测量时间,所以它不正确这样做。如果我低于睡眠(45),那么我的网卡会忽略数据包大小并将其设置为1514大小。
有没有人有一些明确的想法怎么做?我只能假设它可能与网卡缓冲区有关。