以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何理解NetworkAddressChanged  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=73751)

--  作者:happyft
--  发布时间:2015/8/25 21:44:00
--  如何理解NetworkAddressChanged

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. 为什么会这样?

谢谢!

--  作者:大红袍
--  发布时间:2015/8/25 21:56:00
--  

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

 

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

 

1、NetworkAvailabilityChangedy先执行;

 

2、不会触发事件;

 

3、不会触发事件。

 


--  作者:HappyFt
--  发布时间: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

--  作者:大红袍
--  发布时间: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
--  发布时间:2015/8/27 12:06:00
--  

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

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

 

 

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


--  作者:lmk
--  发布时间:2015/8/27 12:24:00
--  
在执行连接远程服务器之前,加入判断远程服务器是否可用的代码,应该可以解决。
--  作者:大红袍
--  发布时间: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
--  发布时间:2015/8/27 17:12:00
--  
大红袍老师,socket通信那个不会啊,原来有听说这次更新要增加socket相关的功能,但愿真的有。