这段代码为啥有时候会报错?(socket error=10040)

这段代码为何有时候会报错?(socket error=10040)

            EndPoint remoteIPE = (EndPoint)serverpoint; 
            server = new Socket( AddressFamily.InterNetwork,SocketType.Dgram, ProtocolType.Udp);
            server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

            server.Bind(serverpoint);
            m_regex = new Regex("<([0-9]{1,3})>", RegexOptions.Compiled);
         //  socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,onrecvdata,socket);
            server.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref remoteIPE, onrecvdata, server);

        private void onrecvdata(IAsyncResult ar)
        {
            Socket server = (Socket)ar.AsyncState;
            
            if (server != null)
            {
                EndPoint remoteIPE = (EndPoint)serverpoint;
                
                int readbyte = server.EndReceiveFrom(ar, ref remoteIPE);
                string remoteaddress = remoteIPE.ToString();
                string str = Encoding.UTF8.GetString(buffer, 0, readbyte);

                if (readbyte > 0)
                {
                  //  recvstr.Append(str);
                    //Logview.Invoke(new TestDelegate(DelegateMethod), "\n收到客户端数据:" + str + readbyte + " 字节");
                    MessageStruct tmpReturn = new MessageStruct(str,remoteIPE);
                    string ss = tmpReturn.ToString();
                   // Log(remoteIPE, str);
                    Console.WriteLine("收到{2}数据:{0},长度:{1}字节", str, readbyte,remoteaddress);
                  //  buffer = new byte[1200];
                    buffer = new byte[1200];
                    server.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref remoteIPE, new AsyncCallback(onrecvdata), server);
                }
                else
                {
                    server.Close();
                }
            }
        }
socket 有时候会报接受缓冲区太小,10040的错误,服务器上发的每数据包大小不会超过1200个字节,请大家帮忙看看哪里出问题了?
------解决思路----------------------
buffer太小
------解决思路----------------------
引用:
;
                    buffer = new byte[1200];
...
socket 有时候会报接受缓冲区太小,10040的错误,服务器上发的每数据包大小不会超过1200个字节,请大家帮忙看看哪里出问题了?


因为UDP是不用连接的,不能排除其他机器发信息到你的UDP端口。
UDP包的理论最大值可以接近64K,因此你用1200字节的缓冲区是有可能出现10040(MessageSize)错误。

解决方法有两个:
一、(比较好)buffer = new byte[65535];
二、(当你坚持不改缓冲区太小)如果能确认服务器的数据包一定不超过1200个字节,也可以选择忽略10040错误。