我正在使用this类连接GTA:SA:MP服务器。我的网站在一个表格中显示在线玩家,但如果玩家数量超过100,它将无法正确响应并返回0.我尝试将byte[] rBuffer
从500调整为3402但是它不起作用同样。
答案 0 :(得分:1)
UDP数据报在互联网上具有最大大小。这将是大约500字节。如果需要发送更多数据,则需要对其进行分区,并将其作为多个数据报发送。如果API不支持此功能,您应该通知维护它的人。
删除空白的try-catch语句会更清楚地显示错误 - 忽略这样的异常通常是个坏主意。
答案 1 :(得分:1)
UDP基本上说如果数据丢失就可以了,因为稍后接收它会因为数据被弃用而产生很少的场景。现在关于数据包大小:
UDP标头的长度字段允许最多65535个字节的数据。 但是,如果要通过以太网发送UDP数据包 在网络中,以太网MTU为1500字节,限制了最大数据报 尺寸。此外,一些路由器将尝试分割大型UDP数据包 到512字节的块。
答案 2 :(得分:0)
接收缓冲区很小。增加尺寸,你会没事的。
byte [] rBuffer = new byte [500]; - >将500改为32000
byte [] rBuffer = new byte [3402]; - >将3402更改为32000
你从哪里获得这些价值?如果你收到一个更大的数据包的机会非常高,你将无法从你自己的套接字层获得它。如史蒂文斯所描绘的那样。 Berkeley套接字行为只向用户提供完整的数据包。
同时更改异常处理以捕获异常而不是忽略它:
catch(Exception Ex)
{
Trace.Writeline(Ex.Message);
return false;
}
并在代码中存在异常处理的所有位置执行此操作。