小弟用VB做一个端口扫描工具时,用的是winsock控件,用的是TCP协议,第一次扫描时没有问题,第二次扫描时(没有退出过再运行),出现了winsock对象已存在的问题, 我分析了下,可能是因为winsock在第一次运行时没有卸干净,不过我不知道我的代码哪里出问题了,请各位大虾帮我看看.以下是主要的代码:
For nextPort = Val(port1.Text) To Val(port2.Text)
            
            Load Me.Winsock1(nextPort)
            If Winsock1(nextPort).State <> sckClosed Then
                Winsock1(nextPort).Close
            End If
            Winsock1(nextPort).Connect IpAddr, nextPort
            sleep Val(time.Text) '延时time.text秒
Next nextPortPrivate Sub Winsock1_Connect(Index As Integer)
    '连接成功则将端口信息添加到List中
    '然后关闭Winsock1(index)的连接
    info.AddItem nextPort
    Winsock1(Index).SendData "Quit"
    Winsock1(Index).Close
    Destroy Winsock1(Index)
End Subub Destroy(obj As Object)
    Unload obj
End Sub

解决方案 »

  1.   

    shell("ping -n1 -w 3000 192.168.1.1 >ping1.txt")
    shell("ping -n1 -w 3000 192.168.1.2 >ping2.txt")
    ...
    shell("ping -n1 -w 3000 192.168.1.200 >ping200.txt")
      

  2.   

    连接成功的用Destroy进行的unload,但没有连接成功的winsock仍然存在,所以再次调用时到索引相同的winsock时,就出错了。要将没有连接成功的winsock也unload掉,才会不出错。