C#BeginReceiveFrom给我一个错误

本文关键字:一个 错误 C#BeginReceiveFrom | 更新日期: 2023-09-27 18:21:19

我需要一个程序来监听几台发送状态UDP的机器。我从聊天程序中剪切和粘贴了一些内容,使其正常工作,但在启动时,我收到一个错误:"由于系统缺乏足够的缓冲空间或队列已满,无法对套接字执行操作"。如果我同意这个错误,那么一切都很好。在下面的代码中,如果我删除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);
    }
}

C#BeginReceiveFrom给我一个错误

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

相关文章: