C#BeginReceiveFrom给我一个错误

时间:2014-09-10 15:15:46

标签: c# sockets

我需要一个程序来监听几台机器,这些机器会发送一些UDP状态。我从聊天程序中剪切并粘贴了一些内容并使其工作正常但在启动时我收到错误"由于系统缺少足够的缓冲区空间或因为队列已满而无法执行套接字上的操作#34;。如果我确定错误,那么一切正常。在下面的代码中如果我删除了While(true)我没有得到错误,但我只得到一个条目。我想但是回调只会继续运行可能是错误的,每次获取数据都会将其发送给处理。这是我相信我的问题在哪里,但我无法解决如何修复它所以如何在不轮询套接字的情况下继续接收数据?

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);
    }
}

1 个答案:

答案 0 :(得分:2)

不要将BeginReceiveFrom放入循环中。把它放回去。您需要做的是在BeginReceiveFrom函数中添加另一个OnReceive,这将获取下一组数据。