判断Socket是否连接上,需要通过发包来确认:
// 检查一个Socket是否可连接
private bool IsSocketConnected(Socket client)
{
bool blockingState = client.Blocking;
try
{
byte[] tmp = new byte[1];
client.Blocking = false;
client.Send(tmp, 0, 0);
return false;
}
catch (SocketException e)
{
// 产生 10035 == WSAEWOULDBLOCK 错误,说明被阻止了,但是还是连接的
if (e.NativeErrorCode.Equals(10035))
return false;
else
return true;
}
finally
{
client.Blocking = blockingState; // 恢复状态
}
}
这个函数是MSDN上提供的,经过测试,效率不错,反应很快,结合前面的多线程来检测多个Socket,以完成在线Socket界面实时更新非常不错。