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秒也太久了。

解决方案 »

  1.   

    http://tangentsoft.net/wskfaq/newbie.html
    里面讲了,你阅读一下应该有帮助
      

  2.   

    ping好像不大可靠,如果对方阻止被ping就惨了。
      

  3.   

    看来一定的用INTEL或PING先探路才可以,用WINSOCK本身没有办法。结贴了吧
      

  4.   

    楼主错了,你这个最好还是用winsock来判断,因为ping的方法没有端口概念,协议不同。另外还有,如果对方阻止ping了,winsock未必就连不上。权衡使用之。
      

  5.   

    在局域网中,只要你ping了,如果对方在线,你的ARP缓存中就会有他的数据,不管通不通
      

  6.   

    可以指定其多几次连接,以前我就是这么做的,效果不错,也就几秒。
    改写你的代码如下:
    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 Ifj = 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 withEnd Sub
      

  7.   

    If .State <> 6 And j Mod 16 = 0 Then  '处于“正在连接”,且循环了16次
      

  8.   

    可能是解析服务器名称造成的。
    解决方法:取消服务器DNS反向解析
      

  9.   

    RemoteHost = "188.188.188.8"
    这和dns有问题吗?