最近用c#编写一个一卡通网络通讯程序,服务端如何判断某个套接字是否关闭,查找了好多资料,也没能解决,经过重新琢磨socket中的Poll函数和TcpClient中的属性Connected,二者组合则可判断网络是否关闭,代码如下
public bool IsConnected(TcpClient tc)
{
if (tc==null || tc.Client.Connected == false ||
tc.Client.Poll(1, SelectMode.SelectRead) == true && tc.Available==0)
{
return false;
}
return true;
}
另外在服务端的线程中又加了心跳检测包,由客户端不定期发送固定格式数据,如果服务端在设定时间内没有响应,则判断该链接已经断开。