精确的判断网络是否可用
2007-10-16 22:26
405 查看
转载自:http://blog.joycode.com/5drush/archive/2004/10/04/34843.aspx
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;
}
}
方法二:
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);
int flag;
string State = InternetGetConnectedState(out flag, 0).ToString();
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;
}
}
方法二:
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);
int flag;
string State = InternetGetConnectedState(out flag, 0).ToString();
相关文章推荐
- [C#]精确的判断网络是否可用
- 精确的判断网络是否可用(转贴)
- android 程序中判断当前是否连接网络,网络是否可用
- Broadcast监听网络状态,ping判断网络是否可用
- 判断网络是否可用
- Android中判断网络连接是否可用及监控网络状态
- android判断网络是否可用方法
- 判断网络是否可用的方法
- 判断网络是否可用
- Android检测网络状态,判断当前网络是否可用
- android 判断网络是否可用(2G/3G/WLAN)
- android中判断网络连接是否可用 2g、3g、wifi
- C# 判断计算机网络是否可用
- android 判断网络连接是否可用
- Android中判断网络连接是否可用及监控网络状态
- android 判断网络是否可用
- Android 中判断网络连接和GPS是否可用及HTTPCLIENT使用
- Android中判断网络连接是否可用及监控网络状态
- [Android]判断网络连接是否可用
- Android中判断有无可用网络(是否是3G或者WIFI网络)