精确的判断网络是否可用

发表于:2007-06-30来源:作者:点击数: 标签:
Socket类的Connected属性往往不能精确的判断出 网络 是否连接,下面这段代码可以解决这个问题 /// summary /// 是否已经连接 /// /summary public virtual bool Connected { get { try { //检查socket的状态是否可读 if(m_socket.Connected m_socket.Poll(0,
Socket类的Connected属性往往不能精确的判断出网络是否连接,下面这段代码可以解决这个问题

/// <summary>
/// 是否已经连接
/// </summary>
public virtual bool Connected
{
get
{
try
{
//检查socket的状态是否可读
if(m_socket.Connected && m_socket.Poll(0, SelectMode.SelectRead))
{
byte[] aByte = new byte[1];
//因为TCP/IP协议无法精确的判断网络是否可用
//试读一个字符,Peek参数指定读取的字符不会从缓冲区中移除
//假如可读则表示连接可用
if(m_socket.Receive(aByte, 0, 1, SocketFlags.Peek) != 0)
return true;
Close("Disconnected.");
return false;
}
}
catch(SocketException e)
{
OnException(e);
}
return m_socket.Connected;
}
}



原文转自:http://www.ltesting.net