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);
}
}
不要将BeginReceiveFrom
放入循环中。把它自己放回去。您需要做的是在OnReceive
函数中放入另一个BeginReceiveFrom
,这将获取下一组数据。