我试了两种方法来处理都有相同问题:
我试了两种方法来处理都有相同问题:
[此贴子已经被作者于2006-1-9 13:18:31编辑过]
在VB中怎么用代码实现类似PING的指令?也就是说在VB中怎么在尽量短的时间内判断远程主机是否存在?
曾经用Winsock控件时也遇到过类似的问题,如果客户端连接的是一台存在的远程主机则一切正常,但如果连接的是一台不存在的主机,则程序就只能一直在那尝试连接了,这个等待时间就更长了……
IF winsock1.state=0 then Winsock1.Connect
Do while Winsock1.State<>7 '判断有没有连接上
Doevents
Loop
Winsock连接的时候可以用超时时间来控制。
Option Explicit
Private Sub Command1_Click()
Dim ret As Boolean
With Winsock1
If .State <> 0 Then
.Close
End If
.RemoteHost = "172.16.39.91"
.RemotePort = "80"
.Connect
ret = WaitForConnect(Winsock1, 5) '等待5秒
If ret Then
MsgBox "连接成功¡"
Else
MsgBox "连接超时!"
End If
End With
End Sub
Private Function WaitForConnect(sock As Winsock, Timeout As Integer) As Boolean
Dim StartTime As Date
StartTime = Now
Do While sock.State <> 7 And DateDiff("s", StartTime, Now) < Timeout
DoEvents
Loop
If sock.State = 7 Then
WaitForConnect = True
Else
WaitForConnect = False
End If
End Function
[此贴子已经被作者于2006-1-10 8:52:54编辑过]
感谢griefforyou的帮助!
我用您修改过的那个程序在我机器上测试的结果为:
判断本机大概3~4秒;(cmd下ping 约3~4秒)
判断"ping返回信息中TTL=128的机器"大概3~4秒;(cmd下ping 约3~4秒)
判断"ping返回信息中TTL=64的机器"基本上在33秒以上——时间莫名其妙地长;(cmd下ping 也只需3~4秒)
判断"ping不存在的机器"大概20秒;(cmd下ping 约20秒)
难道是因为我的机器配置太差了,才跑得这么慢?
[此贴子已经被作者于2006-1-10 12:48:12编辑过]