判斷Socket是否連接上,需要通過發包來確認:
1 // 檢查一個Socket是否可連接 2 private bool IsSocketConnected(Socket client) 3 { 4 bool blockingState = client.Blocking; 5 try 6 { 7 byte[] tmp = new byte[1]; 8 client.Blocking = false; 9 client.Send(tmp, 0, 0); 10 return false; 11 } 12 catch (SocketException e) 13 { 14 // 產生 10035 == WSAEWOULDBLOCK 錯誤,說明被阻止了,但是還是連接的 15 if (e.NativeErrorCode.Equals(10035)) 16 return false; 17 else 18 return true; 19 } 20 finally 21 { 22 client.Blocking = blockingState; // 恢復狀態 23 } 24 }
這個函數是MSDN上提供的,經過測試,效率不錯,反應很快,結合前面的多線程來檢測多個Socket,以完成在線Socket界面實時更新非常不錯。
轉載請注明原址:http://www.cnblogs.com/lekko/archive/2012/08/02/2619197.html