Dim portnum As Long
Dim RemoteIP As String
Public Sub ScanningPorts()
portnum = Text1.Text
If portnum <> 0 Then
    'MsgBox "开始"
    Winsock1.RemoteHost = RemoteIP
    Winsock1.RemotePort = portnum
    Winsock1.Connect
    DoEvents
    Winsock1.Close
Else
    MsgBox "请指定端口号!"
End If
    
End SubPrivate Sub btn1_Click()
RemoteIP = ipstart.Text
Call ScanningPorts
End SubPrivate Sub Winsock1_Connect()
MsgBox "此端口开启!!"
End Sub问两个问题:
我在用winsock编程的时候,测试端口用的是135,可是在点击按钮以后,有时就触发了connect事件,有时不触发,我就加了句 MsgBox "开始"  ,这样就可以每次都触发。1.这是什么原因。该怎么解决,谢谢了!2.是不是用connect进行连接,即使端口开启,也不是每次都可以连接成功的?

解决方案 »

  1.   

    1.connect是需要时间的,你connect后马上close,就有可能winsock还没连接成功就关闭了,所以connect事件也就不会触发,可通过检测state的值来获得连接状态,7为已连接;
    2.是的,服务器有权也有可能拒绝你的连接
      

  2.   

    可能是要加个sleep,或是加个循环判断的。因为连接不是马上就能连上的,是需要时间的。和网速,和机器运行速度都有关系的吧。
      

  3.   

    把 Winsock1.Close  放到连接事件中……Private Sub Winsock1_Connect()
       MsgBox "此端口开启!!"
       Winsock1.Close
    End Sub
      

  4.   

    你可以再一个timer事件中加判断winsock.state的值,当winsock.state的值等于7的时候,在去触发你的事件
      

  5.   

    Public Sub ScanningPorts()
    on error resume next
    if winsock1.state<>0 then Winsock1.Close
    Winsock1.RemoteHost = ipstart.Text
    If Err.Number <> 0 Then MsgBox Err.Description: Err.Clear: Exit Sub
    Winsock1.RemotePort = Text1.Text
    If Err.Number <> 0 Then MsgBox Err.Description: Err.Clear: Exit Sub
    Winsock1.Connect
    If Err.Number <> 0 Then MsgBox Err.Description: Err.Clear: Exit Sub
    End SubPrivate Sub btn1_Click()
    Call ScanningPorts
    End SubPrivate Sub Winsock1_Connect()
    Winsock1.Close
    MsgBox "此端口开启!!"
    End Sub
      

  6.   

    最好别加个这 MsgBox "此端口开启!!" 可能会中断程序