尝试接收小型UDP数据包时出现消息大小错误

时间:2017-10-10 19:31:46

标签: c# windows unity3d udp

当我致电Socket.ReceiveFrom时,我收到以下异常:

  

System.Net.Sockets.SocketException:在数据报套接字上发送的消息大于内部消息缓冲区或某些其他网络限制,或者用于接收数据报的缓冲区小于数据报本身。

但是,我只发送了一个118字节的数据包。

代码非常简单:

numBytesRead = udpSocket.ReceiveFrom(data, ref _udpRemoteEndPoint);

将数据分配到1200字节。

我做错了什么?

值得一提的是,只有在 Windows 上运行时才会出现此错误 - 代码在我的Mac上运行良好。

更多细节:我在Unity(游戏引擎)中使用C#代码编写 我在每台机器上打开一个TCP套接字和一个UDP套接字。我使用Select循环来处理同一个线程,所以只有在我知道数据可用后才调用ReceiveFrom。我正在使用TcpClientUdpClient来创建套接字。

编辑:This question不同,因为我没有发送大包。我不认为我的118字节有效负载应该溢出任何内部缓冲区。

1 个答案:

答案 0 :(得分:1)

你必须为缓冲区设置足够的空间: 字节[]数据=新字节[1024];

调用也是这样进行的: udpSocket.EndReceiveFrom(ar, ref _udpRemoteEndPoint); 其中 ar 是 IAsyscResult 类型。