判断网络链接状态不准确

毛员外 2010-06-19 02:42:18
我是adsl上网的

我用下面的方法检测网络链接,判断不准确
设置断点测试,不论是否连接网络return state都返回true
怎么回事??

[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState( out int connectionDescription, int reservedValue ) ;

private bool IsConnected()
{
int I=0;
bool state = InternetGetConnectedState(out I,0);
return state;
}
...全文
484 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
毛员外 2010-06-19
  • 打赏
  • 举报
回复
感觉ping 也不是很完美,要是网络状况不好

如果有两个拨号器
一个自启动程序,用ping判断网络状况,能ping通,但是超出了timeout时间,结果链接网络失败
另一个手工链接,不判断网络状况,直接链接网络,结果链接成功了

奶奶的,要效果,就只有将慢速度了



hh252438823 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mf19870602 的回复:]

知道为啥子InternetGetConnectedState 失灵了

只要用户pc Internet属性-链接-从不进行拨号链接 设置成这样子

无论你拨不拨号,这个这个函数的返回值 都是true

呵呵,那偶去ping去
[/Quote]

的确如此,只要插了网线,任务栏有显示“本地已连接”一类的就会返回true
毛员外 2010-06-19
  • 打赏
  • 举报
回复
知道为啥子InternetGetConnectedState 失灵了

只要用户pc Internet属性-链接-从不进行拨号链接 设置成这样子

无论你拨不拨号,这个这个函数的返回值 都是true

呵呵,那偶去ping去
皇城龙三 2010-06-19
  • 打赏
  • 举报
回复
可以自己写个方法实现ping的功能,调用返回的值,判断网络状态

例子如下:
public string sPing(string IP)
{
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 1200;
//string IP = "192.168.100.1";
PingReply reply = pingSender.Send(IP, timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
//string sText;

string sPing;

sPing = "网络正常";


return sPing;


}
else
{
return "网络不通";

}





}


hh252438823 2010-06-19
  • 打赏
  • 举报
回复

private void Form_Load(object sender, EventArgs e)
{
public Ping ping = new Ping();

public PingReply res;

try
{
res = ping.Send("www.google.com");
}
catch (Exception a)
{
MessageBox.Show(a.Message);
}


try
{
if (res.Status != System.Net.NetworkInformation.IPStatus.Success)
{
this.reflectionLabel1.Text = "<b>请检查网络连接是否正常</b>";

}
else
{
this.reflectionLabel1.Text = "<b>已连接</b>";
}
}
catch (Exception ae)
{
MessageBox.Show(ae.Message);
}
}






这个ping方法亲自尝试,绝对有效,也是曾经在Csdn上找到的!

楼主试试把!
jianuMan 2010-06-19
  • 打赏
  • 举报
回复
接分了

接分了
捷哥1999 2010-06-19
  • 打赏
  • 举报
回复
用ping,你的思路是对的!
实现代码:
http://www.csharphelp.com/archives2/files/archive296/ping.cs
毛员外 2010-06-19
  • 打赏
  • 举报
回复
刚刚测试了下
我是5个人共用一个猫儿(带路由功能),两个ADSL账号
情况一:拔掉我机子的网线(相当于关掉调解器),InternetGetConnectedState返回false
情况二:不拔网线,但是pc机不拨号, InternetGetConnectedState返回ture,LAN型网络链接
情况三:不拔网线,但是pc机拨号, InternetGetConnectedState返回true,MODEM网络链接

这函数是不是判断调解器是否有网络连通啊,我想判断的是本机的网络连通状态,
上面这三种情况都不是我想要的
我的目的是:电脑ADSL建立连接了,表示网络连通
电脑ADSL没建立连接,表示未链接网络

怎么做到这点??ping么?大大们等不等告诉俺怎么判断本机的网络连接状况
水哥阿乐 2010-06-19
  • 打赏
  • 举报
回复
帮顶一下

111,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧