使用过程中,当客户端或服务器端的程序非正常关闭(即没有显式调用sock.close),那么再运行程序时则连接不上。我考虑是端口没有释放的缘故,请那位指点如何解决该问题?
另外,当客户端与服务器断开时,要执行多次doevents()等待才能关闭服务器端的对应连接,而且有时还没有效果。请问有没有更好的办法?

解决方案 »

  1.   

    Client断开连接后再与Server连接就连接不上,必须退出应用重新进入才能连
    接, 解决是不要在 Client 端使用 Close 方法, 而在服务端使用。服务端的数据接受过程:
    Sub Server_DataArrival(ByVal bytesTotal as Long)
       Dim vbStr as String
       Server.GetData DataReceived, vbStr
       if Cstr(DataReceived)= "QUIT" then
         server.close
         server.LocalPort = 1111
         server.Listen
       end if
    。。
    End Sub客户端关闭时:
      Client.SendData "QUIT"
      

  2.   

    vb的程序啊。
    我这有很早前写的代码。你可以参考一下。
    Dim wskNO As Integer
    wsklisten(Winsock) 用于监听
    wsk(Winsock) 用于接受连接的数组
    Private Sub wskListen_ConnectionRequest(ByVal requestID As Long)
      On Error Resume Next
      wsk(wskNO).Accept requestID
      wskNO = wskNO + 1
      Load wsk(wskNO)
    End Sub
    Private Sub Form_Load()
      wskNO = 0
    End Sub这样一个Winsock用于监听。另一个是一个Winsock数组。如果有新的连接进来就Load一个新的Winsock用于维护这个连接。
      

  3.   

    Load wsk(wskNO)之前一定要做判断。
    我的做法是每个wsk load之后就把对应的变量设成true,然后定时检查/每次发送之前检查wsk.state,如果发现是closed或者closing就立刻unload wsk(index),同时变量设成False,这样一来节省了资源,二来方便下次连结。
    如果断线之后重新联结,则先判断一下变量的值,再决定是不是需要先unload wsk(index)
      

  4.   

    pp616(傻小子), rappercn(rapper)      你们二位都偏题了,我这些都知道。我问的是断开联接的问题