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

C# 尝试接收小UDP数据包时出现消息大小错误,c#,windows,unity3d,udp,C#,Windows,Unity3d,Udp,当我调用Socket.ReceiveFrom时,我得到以下异常: System.Net.Sockets.SocketException:在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或者用于接收数据报的缓冲区小于数据报本身 然而,我只发送了一个118字节的数据包 代码非常简单: numBytesRead = udpSocket.ReceiveFrom(data, ref _udpRemoteEndPoint); 其中数据分配到1200字节 我做错了什么 值得一提的是,我只有在

当我调用Socket.ReceiveFrom时,我得到以下异常:

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

然而,我只发送了一个118字节的数据包

代码非常简单:

numBytesRead = udpSocket.ReceiveFrom(data, ref _udpRemoteEndPoint);
其中数据分配到1200字节

我做错了什么

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

还有一些细节:我正在Unity(游戏引擎)中用C#代码编写 我在每台机器上打开了一个
TCP
套接字和一个
UDP
套接字。我使用
Select
循环在同一线程中处理这两个问题,因此只有在知道数据可用后,我才调用
ReceiveFrom
。我正在使用
TcpClient
UdpClient
创建套接字


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

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

电话也是这样打的: udpSocket.EndReceiveFrom(ar,ref udpRemoteEndPoint);
其中ar是IASYSCRSULT类型。

Q:“我只有在Windows上运行时才会出现此错误…”答:这是因为它是.Net System.Net.Sockets库中的一个限制,而不是“Sockets”本身。建议:声明一个更大的缓冲区,或查找System.Net.Sockets之外的其他网络库。此外,考虑使用<代码>接收异步/代码>部分读取:@ PaulsM4认为Stase.NET.Sokes不能处理118字节数据包的想法是荒谬的。请举出你从哪里得到的。我从来没有说过它不能处理118字节的数据包。相反,我试图让OP关注.Net库——以及他是如何使用它的——而不是一般的“Windows”或“套接字”。我的建议仍然存在。我尝试扩大缓冲区并使用ReceiveAsync-仍然是相同的错误。谢谢,数据确实分配了。我用的是ReceiveFrom,不是EndReceiveFrom。没什么大区别。