你一定要把连接设置为nothing,从内存中清除这个对象。windows中的tcp/ip总是不如unix中的socket听话,似乎是timeout问题。资源的释放有些问题,尤其是从VB中使用。仅供参考

解决方案 »

  1.   

    在ide环境中会出现这中情况。但是编译成exe后只要调用了close方法。就不会出现你的问题了。
      

  2.   

    试一试这个:
    在winsock.close语句之后加上
    for iLoop = 0 to 10000
        DoEvents
    Next iLoop
      

  3.   

    这段代码:
    for iLoop = 0 to 10000
        DoEvents
    Next iLoop
    是什么意思?好像还是无法解决问题,倒底要如何使用?
      

  4.   

    请问:
    客户端用到过winsock的Listen方法吗?
      

  5.   

    那现在我想关闭了,倒底有没有办法呢?
    VB的winsock不会做得这么不周到吧,联上了就关不了了吧!
    还请赐教?
      

  6.   

    服务器端程序用到了socket控件数组吗?
      

  7.   

    服务器端程序用到了socket控件数组。
    我也搞不清楚,为何会这样!
    在服务器端Listen
    然后在客户端connect
    连接成功后发送数据...
    一切都没问题,就是退出程序后,如果再启动程序进行Connect的话就发生了这种事!!!
      

  8.   

    建议再服务器端的ConnectionRequest事件里加入以下代码
    If tcpServer.State <> sckClosed Then 
        tcpServer.Close
    end if
      

  9.   

    能够把服务器端Form_Load以及ConnectionRequest的代码贴出来看一下吗?
      

  10.   

    Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        Dim i As Integer
        Dim blnOK As Boolean
        
        For i = 1 To Winsock1().UBound
            If Winsock1(i).State = sckClosed Then
                blnOK = True
                Exit For
            End If
        Next i
          
        If blnOK = False Then
            i = Winsock1().UBound + 1
            Load Winsock1(i)
        End If
       
        Winsock1(i).Accept requestID
    End Sub
    初始化是用:
    With Winsock1(0)
        .Protocol = sckTCPProtocol
        .RemotePort = 1500
        .LocalPort = 1501
        .Listen
    End With
      

  11.   

    我在服务器端使用你的代码,客户端使用以下代码,试验了一下,没有问题
    Command1
    Text1
    WinSock1Private Sub Command1_Click()
        Text1.Text = ""
        Winsock1.RemoteHost = "10.1.1.100"
        Winsock1.RemotePort = 1501
        Winsock1.Connect
    End SubPrivate Sub Winsock1_Connect()
        Text1.Text = "Connected."
    End SubPrivate Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        MsgBox Number & Description
    End Sub
      

  12.   

    是由于底层的TCP/IP连接没有真正的断开,你可以常识一个地址范围去connect,就是这个口不行自动用别的口, 一但Close后一旦TimeOut服务器端会自动断开
      

  13.   

    因为你没有真正的断开连接!很有可能,你的程序没有关闭,例如还有隐藏窗体,也就是说在没有断开连接的情况下,你关闭了可见窗体,但还有隐藏窗体没有关闭,这样程序还在运行,连接也就不会关闭。
    解决方法:1 检查程序,确保在退出时,已经关闭了连接(需要在服务器端关闭,用WINSOCK(INDEX).CLOSE,客户端不要理它)。
             2 有没有以无模式的方法打开过一个窗体,而在退出时,这个窗体是不可见的,但并没有关闭。可以用END语句强行结束程序。
              3 因为是客户端,不要指定LOCALPORT,这样即使你同时运行十几个客户端,也不会发生地址冲突(这一点可以彻底解决问题)。