首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

高分难题,winsock的连接返回时间有关问题。

2012-02-19 
高分难题,winsock的连接返回时间问题。。。PrivateSubHs_call()Winsk1.RemoteHost188.188.188.8 Winsk1.Re

高分难题,winsock的连接返回时间问题。。。
Private   Sub   Hs_call()
Winsk1.RemoteHost   =   "188.188.188.8 "
Winsk1.RemotePort   =   6666
If   Winsock1.State   <>   sckClosed   Then
        Winsock1.Close
End   If
Winsock1.Connect
DoEvents
End   Sub
以上是winsock的常见的客户端连接,当connect的IP地址存在的时候,握手正常一般只要1-2秒,当connect的IP存在,但握手不正常,返回错误信息的时间也只要2-5秒,但是当所connect的IP不存在,比如192.168.1.6或以上IP在内网不存在,那么返回错误信息的时间就要50秒左右。
问题是怎么缩短IP不存在时的返回时间?50秒也太久了。

[解决办法]
http://tangentsoft.net/wskfaq/newbie.html
里面讲了,你阅读一下应该有帮助
[解决办法]
1.本地端口设置为0试试
2.做一个时间检测过程,检查等待时间,如果超时就咔嚓。
[解决办法]
或者使用前先评对方的IP地址
[解决办法]
ping好像不大可靠,如果对方阻止被ping就惨了。
[解决办法]
4242 防火墙可以禁止ping
[解决办法]
楼主错了,你这个最好还是用winsock来判断,因为ping的方法没有端口概念,协议不同。另外还有,如果对方阻止ping了,winsock未必就连不上。权衡使用之。
[解决办法]
在局域网中,只要你ping了,如果对方在线,你的ARP缓存中就会有他的数据,不管通不通
[解决办法]
可以指定其多几次连接,以前我就是这么做的,效果不错,也就几秒。
改写你的代码如下:
Private Sub Hs_call()
dim j, iTryTimes as ingteger
Winsk1.RemoteHost = "188.188.188.8 "
Winsk1.RemotePort = 6666
If Winsock1.State <> sckClosed Then
Winsock1.Close
End If

j = 0
iTryTimes =128 '设定试图连接的次数
with Winsk1
Do
DoEvents
If .State = 7 Then Exit Do '如果连上就退出
j = j + 1
If .State <> 6 And j Mod 16 = 0 Then '处于“正在连接”或“关闭”状态
.Close
DoEvents
.RemoteHost = "188.188.188.8 "
.RemotePort = 6666
.Protocol = sckTCPProtocol
.Connect
End If
If j > iTryTimes Then Exit Do '
Loop
end with

End Sub

热点排行