winsock.connect ip,port 当IP找不到时,出现长达20多秒的超时等待才返回错误,此时应用程序像死了一样,请问如何让其马上返回错误,这个问题如何解决,在VB中很难解决呀,请教高手!送分。。

解决方案 »

  1.   

    初始化写
    Winsock2.RemoteHost = 127.0.0.1
        Winsock2.RemotePort = 1080
        Winsock2.connect
    事件中写
    Private Sub Winsock2_Connect()On Error GoTo errendWinsock2.SendData "ok"
    Exit Sub
    errend:
    MsgBox "连接发生错误!数据发送失败!", vbOKOnly + vbExclamation, "TCP 错误信息"
    End Sub
      

  2.   

    影子的代码测试了,没有用,依然要等很久,而且连不上后不会触发Connect事件,而是触发ERROR事件。
      

  3.   

    直接在连接的过程中用err

    Private Sub connectCmd_Click()
     On Error GoTo errDoIf Winsock1.State <> 0 Then
    Winsock1.Close
    Timer1.Enabled = FalseMsgBox ipText.TextWinsock1.RemoteHost = Trim(ipText.Text)Winsock1.RemotePort = Trim(PortText.Text)
        
    End If
    Winsock1.LocalPort = 0Winsock1.Connect
    Timer1.Enabled = True
    Exit SuberrDo:
     'MsgBox "Error!!!!!!!"
     MsgBox Err.Description
     
      
    End Sub
      

  4.   

    楼上的,那个timer1是干什么的?
      

  5.   

    等待肯定有不过怎么会出现不能动的情况呢如果程序死在那儿的话,你在winsock.connect前面加上DoEvents
      

  6.   

    当然如果你connect一个互联网上的Ip自然慢点.不过你可以把winsock.connect放在定时器事件里执行,那就不用等了.
      

  7.   

    这里很多人回答问题都是想当然,其实不是那么回事。
    等待多少时间与机器的设定有关。最多,只能使用winsock的error事件。
    不要随便加DOEVENTS,根本没用。更不要加TIMER控件,惹来的麻烦比得到的好处要多。
      

  8.   

    用timer没什么不好的, 根据网络连接情况每次手动设置判断间隔,如果时间内没有连接则为不能连接(当然完全由系统返回错误是100%的确认无法连接了),用这样的方法我扫描一个远程(65535每个端口)少于5分钟--每次只开一个线程,而且结果基本可靠! 我个人认为某些情况手动设置远比error返回要实际得多。
      

  9.   

    如果只是确认一个服务,推荐error返回
      

  10.   


    看看这个管用不Dim sIP As String初始化
    Winsock2.RemoteHost = 127.0.0.1
    Winsock2.RemotePort = 1080Private Sub Command1_Click()
    Winsock1.Connect
    Command1.Enabled = False
    Label1.Caption = "连接远程服务器...."
    Do Until Winsock1.State = 7
       If Winsock1.State = 0 Or Winsock1.State = 9 Then
          Command1.Enabled = True
          Winsock1.Close
          Label1.Caption = "无法连接"
          Exit Sub
       End If
       DoEvents
       Label1.Caption = "已经连接到服务器...."
    Loop
    Label1.Caption = "服务器IP:" & Winsock1.RemoteHostIP
    sIP = Winsock1.RemoteHostIP
    'Winsock1.Close
    Command1.Enabled = True
    End Sub