-1
我需要一个程序来侦听几台发送了一些UDP状态的机器。我从一个聊天程序中剪切并粘贴了一些东西,并且启动了一些东西,但是在启动时出现错误“由于系统缺少足够的缓冲空间或者队列已满,无法对套接字执行操作”。如果我确定错误,那么一切运作良好。在下面的代码中,如果我删除While(true),则不会收到错误,但我只能获得一个条目。我想,但可能是错误的,回调将继续运行,每次获得数据将发送它来处理。这是我相信我的问题在哪里,但我不知道如何解决这个问题,所以如何在不查询套接字的情况下继续接收数据?C#BeginReceiveFrom给我一个错误
private void Form1_Load(object sender, EventArgs e)
{
try
{
CheckForIllegalCrossThreadCalls = false;
//We are using UDP sockets
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//Assign the any IP of the machine and listen on port number 701
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 701);
//Bind this address to the server
serverSocket.Bind(ipEndPoint);
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
//The epSender identifies the incoming clients
EndPoint epSender = (EndPoint)ipeSender;
while (true)
{
//Start receiving data
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "SGSServerUDP", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
如果可能,请包含'OnReceive'的代码[作为您的问题的编辑](http://stackoverflow.com/posts/25769099/edit)。 – 2014-09-10 15:20:23
删除可怕的CheckForIllegalCrossThreadCalls分配。 (true)循环删除根本错误。您现在可以更好地编写正确的代码。 – 2014-09-10 15:55:35