这段代码为何有时候会报错?(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个字节,请大家帮忙看看哪里出问题了?