这是我程序的输出

sending agent update
Created new player
Identified
sending agent update
Physics: 2 ticks this frame
time= 200
time= 300
***Packet Dropped: 2:10 ***
***Packet Dropped: 2:11 ***
***Packet Dropped: 2:12 ***
***Packet Dropped: 2:13 ***
***Packet Dropped: 2:14 ***
***Packet Dropped: 2:15 ***
***Packet Dropped: 2:16 ***
***Packet Dropped: 2:17 ***
***Packet Dropped: 2:18 ***
***Packet Dropped: 2:19 ***
***Packet Dropped: 2:20 ***
***Packet Dropped: 2:21 ***
time= 400
Physics: 2 ticks this frame
time= 500
Physics: 2 ticks this frame

从本地主机向本地主机发送数据包时,数据包正在丢弃。这仅在开始时发生。前10个左右的数据包通过,然后下降。连续5到40个数据包。然后,数据包停止丢弃。

有什么理由要发生这种情况吗?

更新:

以下代码解决了该问题。
int buffsize = 65536; // 65536
setsockopt(socket, SOL_SOCKET, SO_RCVBUF, (void*)&buffsize, sizeof(buffsize));

我发送数据包的速度太快,超出了Windows默认的接收缓冲区,即只有8 KB。增加缓冲区大小可以解决此问题。

最佳答案

检查操作系统中默认配置的 UDP 缓冲区大小。

如果您发现它较少,则可以在创建 UDP 套接字时显式提供更大的值。
int buffer_size = 4 * 1024 * 1024 ;
setockopt(socket, SOL_SOCKET, SO_RCVBUF, &buffer_size, sizeof(buffer_size));


您可能会发现 THIS 链接非常有用。

10-07 18:27