Foxtable(狐表)用户栏目专家坐堂 → 如何理解NetworkAddressChanged


  共有3281人关注过本帖树形打印复制链接

主题:如何理解NetworkAddressChanged

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17528 威望:0 精华:0 注册:2014/7/29 19:09:00
如何理解NetworkAddressChanged  发帖心情 Post By:2015/8/25 21:44:00 [只看该作者]

NetworkAddressChanged和NetworkAvailabilityChangedy这两个事件很难理解

1、人为的将网线拔掉,这种情况哪个事件会执行?

2、本地网络没断,但远程服务器突然连接不上了,哪个事件会执行?

3、网络没断,但人为改变了服务器的IP地址,哪个事件会执行?
因为在这两个事件中用了如下的代码,
Dim myConnTest As New ConnTest.ConnNetTest
If myConnTest.ConnNetTestByConnStr(Connections("EI").ConnectionString,1000) = False Then 
    Vars("网络状态") = False
Else
    Vars("网络状态") = True
End If
msgbox(Vars("网络状态"))

当把网络拔掉时,msgbox弹出的对话框显示Vars("网络状态") 为 true(应该是false才对啊) ,此时同样的代码复制到命令窗口执行时,Vars("网络状态")却显示为false. 为什么会这样?

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/25 21:56:00 [只看该作者]

肯定是你封装的方法有问题,在这两个事件,如果你ping网址,是会报错的正确这样写

 

msgbox(TryConnectHost("www.baidu.com"))

 

1、NetworkAvailabilityChangedy先执行;

 

2、不会触发事件;

 

3、不会触发事件。

 


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17528 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/8/25 22:03:00 [只看该作者]

谢谢,用TryConnectHost("网址")与下面的TryConnect数据源链接字符串哪种更快或更稳定?

'返回数据源EI的链接字符串
Dim s As String = Connections("EI").ConnectionString
If Connections.TryConnect(s) = False Then
    MessageBox.Show("数据源无法连通!")
Else
    MessageBox.Show("数据源可以连通!")
End If

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/25 22:26:00 [只看该作者]

TryConnectHost 是连接服务器的。

 

TryConnect 是连接数据库的。

 

下面这个比TryConnect快一些

 

try
    Dim conn As ADODB.Connection
    conn = New ADODB.Connection
    conn.ConnectionString = Connections("EI").ConnectionString

    conn.Open
   
    msgbox("成功")
    conn.close
Catch ex As Exception
    msgbox("失败")
End try


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17528 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/8/27 12:06:00 [只看该作者]

2、本地网络没断,但远程服务器突然连接不上了,哪个事件会执行?

3、网络没断,但人为改变了服务器的IP地址,哪个事件会执行?

 

 

NetworkAddressChanged和NetworkAvailabilityChangedy这两个事件在上述两种情况都不触发,那在里面写代码来判断网络是否通就没有意义了,那在上述两种情况下有什么办法快速判断网络已经不通了呢?因为昨天就发现,远程服务器已经关了,客户端都没有任何提示,都卡死在那里了


 回到顶部
帅哥哟,离线,有人找我吗?
lmk
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:39 积分:302 威望:0 精华:0 注册:2011/1/9 17:22:00
  发帖心情 Post By:2015/8/27 12:24:00 [只看该作者]

在执行连接远程服务器之前,加入判断远程服务器是否可用的代码,应该可以解决。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/8/27 14:34:00 [只看该作者]

以下是引用HappyFt在2015/8/27 12:06:00的发言:

2、本地网络没断,但远程服务器突然连接不上了,哪个事件会执行?

3、网络没断,但人为改变了服务器的IP地址,哪个事件会执行?

 

 

NetworkAddressChanged和NetworkAvailabilityChangedy这两个事件在上述两种情况都不触发,那在里面写代码来判断网络是否通就没有意义了,那在上述两种情况下有什么办法快速判断网络已经不通了呢?因为昨天就发现,远程服务器已经关了,客户端都没有任何提示,都卡死在那里了

 

NetworkAddressChanged和NetworkAvailabilityChangedy只会检测本计算机的改变。

 

要不你就用socket通信,当服务器无法访问的时候,自然会抛出错误;

 

又或者,你用计时器间断的连接服务器,比如执行 select * fr om {表A} where 1=2。如果报错,也是不能连接了。


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17528 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/8/27 17:12:00 [只看该作者]

大红袍老师,socket通信那个不会啊,原来有听说这次更新要增加socket相关的功能,但愿真的有。

 回到顶部