超过100名玩家在线时套接字失败

时间:2015-02-18 16:32:15

标签: c# asp.net sockets

我正在使用this类连接GTA:SA:MP服务器。我的网站在一个表格中显示在线玩家,但如果玩家数量超过100,它将无法正确响应并返回0.我尝试将byte[] rBuffer从500调整为3402但是它不起作用同样。

3 个答案:

答案 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;
}

并在代码中存在异常处理的所有位置执行此操作。