您的位置:程序门 -> vb -> 控件



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


高分难题,winsock的连接返回时间问题。。。
发表于:2007-07-20 17:34:11 楼主
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秒也太久了。
发表于:2007-07-20 17:53:241楼 得分:0
http://tangentsoft.net/wskfaq/newbie.html
里面讲了,你阅读一下应该有帮助
发表于:2007-07-20 18:00:082楼 得分:0
1.本地端口设置为0试试
2.做一个时间检测过程,检查等待时间,如果超时就咔嚓。
发表于:2007-07-20 19:40:443楼 得分:0
阿扑
发表于:2007-07-20 22:46:574楼 得分:0
帮楼上扑
发表于:2007-07-20 23:01:185楼 得分:0
或者使用前先评对方的ip地址
发表于:2007-07-20 23:07:466楼 得分:0
ping好像不大可靠,如果对方阻止被ping就惨了。
发表于:2007-07-21 00:14:287楼 得分:0
4242   防火墙可以禁止ping
发表于:2007-07-21 07:44:518楼 得分:0
顶置,天天关注
发表于:2007-07-23 07:18:479楼 得分:0
看来一定的用intel或ping先探路才可以,用winsock本身没有办法。结贴了吧
发表于:2007-07-23 08:51:0310楼 得分:0
楼主错了,你这个最好还是用winsock来判断,因为ping的方法没有端口概念,协议不同。另外还有,如果对方阻止ping了,winsock未必就连不上。权衡使用之。
发表于:2007-07-23 13:20:1111楼 得分:0
在局域网中,只要你ping了,如果对方在线,你的arp缓存中就会有他的数据,不管通不通
发表于:2007-07-23 19:09:2612楼 得分:0
可以指定其多几次连接,以前我就是这么做的,效果不错,也就几秒。
改写你的代码如下:
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
发表于:2007-07-23 19:13:2813楼 得分:0
if   .state   <>   6   and   j   mod   16   =   0   then     '处于“正在连接”,且循环了16次
发表于:2007-08-16 14:23:4114楼 得分:0
可能是解析服务器名称造成的。
解决方法:取消服务器dns反向解析
发表于:2007-08-16 16:14:3315楼 得分:0
remotehost   =   "188.188.188.8 "
这和dns有问题吗?


快速检索

最新资讯
热门点击