-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