Office中国论坛/Access中国论坛

标题: VPN中怎样检测服务器是否在线 [打印本页]

作者: zyp    时间: 2012-3-16 14:29
标题: VPN中怎样检测服务器是否在线
本帖最后由 zyp 于 2012-3-16 14:31 编辑

大家好!

用VPN(软件实现)做一个远程数据传输, 就是分公司上传一些数据给总公司的服务器. 用ADO来连接总公司的服务器,代码大致如下:

Public sub SerCK()
On Error GoTo LinkErr
    Dim CN As New ADODB.Connection
    CN.ConnectionString = "DRIVER=SQL SERVER;SERVER=192.168.2.2;UID=abc; PWD=000;DATABASE=test"
    CN.Open
    CN.Execute ("UPDATE ........")   
    CN.Close
    Set CN = Nothing
LinkExit:
    Exit sub
LinkErr:
    MsgBox Err.Number & "    " & Err.Description
    Resume LinkExit
End Function

当总公司服务器的SQL在线时, 程序可以正常执行;

但是, 当总公司服务器的SQL不在线时, 程序会在很长时间(30~60秒)才会做出反应, 提示无法连接;

有没有什么方法可以较为快速的检测出总公司服务器的SQL是否在线?

或者检测出公司的服务器是否与本机正常连接(用IP或用电脑名称都可以)?   因为SQL Server一般都是随机启动的, 而且总公司内部网也要用到它, 所以它一般都是在线的, 只要检测出服务器能够与本机正常通讯也就达到目的了.

谢谢!
作者: zyp    时间: 2012-3-17 21:15
请问哪位朋友有做过这方面处理的,  指点一下!

谢谢!
作者: wu8313    时间: 2012-3-21 16:12
cn.timeout=一个较小的数值,没有响应的时间 会变短。
可以用 错误处理 来捕获 是否连接到 sql 服务器。
作者: zyp    时间: 2012-3-22 12:51
wu8313 发表于 2012-3-21 16:12
cn.timeout=一个较小的数值,没有响应的时间 会变短。
可以用 错误处理 来捕获 是否连接到 sql 服务器。

谢谢Wu8313

我按你的方法试了一下, 发现没有timeout, 只有一个ConnectionTimeout
我写了一个简单的程序测试:

Public Sub A123()
    Dim CN As New ADODB.Connection
    CN.ConnectionString = "DRIVER=SQL SERVER;SERVER=192.168.2.2;UID=abc; PWD=000;DATABASE=test"
    CN.ConnectionTimeout = 2
    CN.Open
    CN.Close
    Set CN = Nothing
End Sub

然后用立即窗口进行测试, 发现不论CN.ConnectionTimeout 设为多少, 运行后到提示连接失败的时间差不多都是一样, 没有任何的区别.

不知是不是我哪里写提不对.

谢谢!
作者: wu8313    时间: 2012-3-22 18:03
这个timeout 好像是没有效果,一直都这样设,没有关注过效果如何。
帮助却写得很明确,郁闷。


[attach]48782[/attach]
作者: todaynew    时间: 2012-3-22 19:37
zyp 发表于 2012-3-22 12:51
谢谢Wu8313

我按你的方法试了一下, 发现没有timeout, 只有一个ConnectionTimeout

设个计时器,到时间连不上就断开。
作者: zyp    时间: 2012-3-23 18:40
wu8313 发表于 2012-3-22 18:03
这个timeout 好像是没有效果,一直都这样设,没有关注过效果如何。
帮助却写得很明确,郁闷。

我测试了多种可能:
(1)主机没有开机或在线, 则ConnectionTimeout设为多少,都没有作用;
(2)主机有开机, 但SQL Server没有运行, 则ConnectionTimeout设定值就有用;
(3)主机有开机且SQL Server有运行, 但要连接的数据库不存在, 设没设ConnectionTimeout这个都无所谓, 因为立刻就可以产生错误了.

可是我主要测试的是就是第(1)种可能, 因为是VPN远程连接, VPN是用软件实现的那种, 不是很稳, 而且有时客户端的用户也会忘了先连VPN再执行相关的数据传输.

所以ConnectionTimeout在这里就用不到. 不过还是要谢谢wu8313, 这个方法以后肯定用得到.
作者: zyp    时间: 2012-3-23 18:44
todaynew 发表于 2012-3-22 19:37
设个计时器,到时间连不上就断开。

这个想法好.

但是我却不知道加在哪里, 要如何写代码.

版主可以再提示一下吗? 谢谢!
作者: zyp    时间: 2012-3-23 18:48
谢谢 风中漫步 的提醒!

虽然是用VPN, 但是网络是正常的, 连上服务器基本上用不到2秒, 我也用过10秒/20秒/30秒试过, 其结果都一样, 只是服务器不在线, 提示连接错误的时间都差不多, 45~55秒才会提示连接错误
作者: 风中漫步    时间: 2012-3-24 13:13
我的理解是:你需要一段代码,用于测试目标服务器是否在线,且返回时间要短,是否ADO不重要.现成的代码没有,给你几个建议

1 引用你电脑中最高版本的ADO试ConnectionTimeout,可行否
2 没记错的话,有位戴墨镜头像的斑竹曾发过一个检测局羽网某台计算机是否在线的函数,没看错的话用的是WMI,WIN2000及以上都可以执行,建议你试试.代码很少,用来换速度还是值的
3 曾记得ACCESS911有篇在线升级的文章,其中的一些方法建议试试
作者: wu8313    时间: 2012-3-25 16:14
本帖最后由 wu8313 于 2012-3-25 16:15 编辑
zyp 发表于 2012-3-23 18:40
我测试了多种可能:
(1)主机没有开机或在线, 则ConnectionTimeout设为多少,都没有作用;
(2)主机有开机,  ...


可以先 ping 服务器,ping 不通的话,就不在线了。这样,你检测第一种可能性 就可以搞定了。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3