使用过程中,当客户端或服务器端的程序非正常关闭(即没有显式调用sock.close),那么再运行程序时则连接不上。我考虑是端口没有释放的缘故,请那位指点如何解决该问题?
另外,当客户端与服务器断开时,要执行多次doevents()等待才能关闭服务器端的对应连接,而且有时还没有效果。请问有没有更好的办法?
另外,当客户端与服务器断开时,要执行多次doevents()等待才能关闭服务器端的对应连接,而且有时还没有效果。请问有没有更好的办法?
接, 解决是不要在 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"
我这有很早前写的代码。你可以参考一下。
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用于维护这个连接。
我的做法是每个wsk load之后就把对应的变量设成true,然后定时检查/每次发送之前检查wsk.state,如果发现是closed或者closing就立刻unload wsk(index),同时变量设成False,这样一来节省了资源,二来方便下次连结。
如果断线之后重新联结,则先判断一下变量的值,再决定是不是需要先unload wsk(index)