在FORM窗口里加入如下声明及自定义函数:
Option Explicit
'定义常量
Const BUSY As Boolean = False
Const FREE As Boolean = True
'寻找空闲的sock
Public Function FindFreeSocket()
Dim SockCount, i As Integer
SockCount = UBound(ConnectState)
For i = 0 To SockCount
If ConnectState(i) = FREE Then
FindFreeSocket = i
Exit Function
End If
Next i
ReDim Preserve ConnectState(0 To SockCount + 1)
FindFreeSocket = UBound(ConnectState)
End Function
在form的load事件里加入以下代码:
ReDim Preserve ConnectState(0 To 1)
On Error Resume Next
ConnectState(0) = FREE
ConnectState(1) = FREE
Listener.LocalPort = 8202 '指定网络端口号
Listener.Listen '‘开始侦听
在接受连接事件里加入以下代码:
Private Sub Listener_ConnectionRequest(ByVal requestID As Long)
Dim SockIndex As Integer
Dim SockNum As Integer
On Error Resume Next
Text1.SelText = requestID & "连接请求" + vbCrLf
'查找连接的用户数
SockNum = UBound(ConnectState)
If SockNum > 14 Then
Text1.SelText = SockIndex & "" + vbCrLf
Exit Sub
End If
'查找空闲的sock
SockIndex = FindFreeSocket()
'如果已有的sock都忙,而且sock数不超过15个,动态添加sock
If SockIndex > SockNum Then
Load Sock(SockIndex)
End If
ConnectState(SockIndex) = BUSY
'Sock(SockIndex).Tag = SockIndex
'接受请求
Sock(SockIndex).Accept (requestID)
Text1.SelText = SockIndex & "接受请求" + vbCrLf
Sock(SockIndex).SendData "等待接收用户名和密码,请稍候!"
Taa = False
End Sub
客户端断开,删除相应SOCK
Private Sub Sock_Close(Index As Integer)
If Sock(Index).State <> sckClosed Then
Sock(Index).Close
End If
'Call RemoveTreeNodes(Index)
Call updatelostuser(Index)
ConnectState(Index) = FREE
End Sub
接收客户端数据:
Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim dx As String
Text1.SelText = "数据来自" & Str(Index) & Sock(Index).RemoteHostIP + vbCrLf
Sock(Index).PeekData dx, vbString
Text1.SelText = Sock(Index).RemoteHostIP & "对你说:" & dx + vbCrLf
end sub