如何动态加载WINSOCKET数组
在服务器服务,放置两个WINSOCKET控件,一个名称为SocketListener,用来监听客户端的CONNECT请求,另一个名称为SocketServer,其INDEX为0,即为一名为SocketServer的控件数组,用来与客户端 建立连接。
在窗体加载时的代码为:
private sub Form_load()
load SocketServer(0)
SocketListener.localport=10000
SocketListener.listen
end sub
当SocketListener接到第一个客户端的CONNECT请求时,安排SocketServer(0)接收此请求并建立 连接
当SocketListener有接到第二个客户端发出CONNECT请求时,如果判断SocketServer(1)有没有加载?
[解决办法]
Private Sub Form_Load()
'用一个数组控件就可以完成了
'加一个winsock1控件,把Index填上0
Winsock1(0).LocalPort = 10000
Winsock1(0).Listen
End Sub
Private Sub Winsock1_Close(Index As Integer)
Winsock1(Index).Close
End Sub
Private Sub Winsock1_Connect(Index As Integer)
'Connect事件,当客户端连接完成的时候触发
End Sub
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim I As Long
For I = 1 To Winsock1.UBound
If Winsock1(I).State = 0 Then Exit For
Next
If I > Winsock1.UBound Then Load Winsock1(I)
Winsock1(I).Accept requestID
End Sub
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'数据到达事件,在此事件中接收处理数据
End Sub
Private Sub Winsock1_Error(Index As Integer, 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)
'连接出错,可以在这里加上错误处理代码
Winsock1(Index).Close
End Sub
[解决办法]
SocketServer.Count 能返回 SocketServer的个数。
用这个数来判断就问题吧!
[解决办法]
服务器结构可以用这组代码来写,省掉一个winsock控件,客户端连接事件都可以在ConnectionRequest事件中去处理.楼主的意思只是想知道SocketServer(1)有没被加载?
如果那样的话,如果你没执行过Unload SocketServer(1)的话用SocketServer.UBound就可以知道数组大小了,如果用过Unload的话,那就比较麻烦了,最好就是借个错误处理来解决.
[解决办法]
在服务器服务,只需放置一个 WINSOCKET 控件,通过数组元素 0 来侦听。接收到客户端的连接请求,将数组扩大 1 个元素来接受请求。
比较普遍的维护客户连接的方法是利用一个数组变量记录客户的当前状态。例如释放了一个客户,相应的数组元素被清空。下一次再有客户连接请求时,找到空的数组元素,就知道可用的空间数组索引了。