我有一個程序在c#中,我創建一個套接字,綁定它,開始聽,然後使用beginaccept! 但是當我嘗試關閉\關閉套接字時,我從beginaccept AsyncCallback方法中收到異常!BeginAccept方法後無法關閉套接字
private void start_listening()
{
main_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iplocal = new IPEndPoint(IPAddress.Any, 11150);
main_socket.Bind(iplocal);
main_socket.Listen(5);
main_socket.BeginAccept(new AsyncCallback(OnClientConnect), null);
}
private void Disconnect_Click(object sender, EventArgs e)
{
main_socket.Shutdown(SocketShutdown.Both);
main_socket.Close();
}
public void OnClientConnect(IAsyncResult asyn)
{
try
{
clients[connected_clients] = new Client("CHANGEME", "127.0.0.1", this);
clients[connected_clients].Socket = main_socket.EndAccept(asyn);
clients[connected_clients].WaitForData();
main_socket.BeginAccept(OnClientConnect, null);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
非常感謝!
+1。不幸的是,沒有諸如「IsClosed」之類的屬性。套接字來自克蘇魯黑暗的非託管世界。 – Roubachof 2009-11-09 10:31:39
實際上,有一種方法:如果套接字在連接的本地側關閉,則Socket.Handle將爲-1。 – Gonzalo 2009-11-09 18:26:00
感謝球員的答案!我會檢查的。 所以你說,當我得到拋出onclientconnect因爲套接字是封閉的,我應該處理該excaption? – Hipno 2009-11-10 06:44:55