VB winsock建立多TCP连接示例

在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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值