判断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