Option Explicit'//在窗体上放两个 winsock 控件,一个命名为 wskListen,另一个命名为 wskData,并设置第二个sock控件的Index属性为0Dim bBusySocks(100) As BooleanPrivate Sub Form_Load() '//监听... wskListen.LocalPort = 9999 wskListen.Listen End SubPrivate Sub wskListen_ConnectionRequest(ByVal requestID As Long) Dim i As Long For i = 1 To 100 If bBusySocks(i) = False Then '//加载新sock Load wskData(i) wskData(i).LocalPort = 0 wskData(i).Accept requestID '//做标记 bBusySocks(i) = True Exit For End If Next
If i = 101 Then MsgBox "用户连接已经到达上限" End SubPrivate Sub wskData_DataArrival(Index As Integer, ByVal bytesTotal As Long) '//这里是处理接收数据的过程 '//.......... '//.......... End SubPrivate Sub wskData_Close(Index As Integer) '//关闭sock Unload wskData(Index) bBusySocks(Index) = False End Sub
If bBusySocks(i) = False Then '//加载新sock Load wskData(i) wskData(i).LocalPort = 0 wskData(i).Accept requestID '//做标记 bBusySocks(i) = True Exit For End If NextbBusySocks(i)不懂这个的意思!!!!
请求连接,然后是多个用户请求的话则多开winsock处理,关闭连接时卸载控件数组的代码,
还有个问题就是,如果这样处理是不是都在同个通道里接收消息和发送消息!
'//监听...
wskListen.LocalPort = 9999
wskListen.Listen
End SubPrivate Sub wskListen_ConnectionRequest(ByVal requestID As Long)
Dim i As Long
For i = 1 To 100
If bBusySocks(i) = False Then
'//加载新sock
Load wskData(i)
wskData(i).LocalPort = 0
wskData(i).Accept requestID
'//做标记
bBusySocks(i) = True
Exit For
End If
Next
If i = 101 Then MsgBox "用户连接已经到达上限"
End SubPrivate Sub wskData_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'//这里是处理接收数据的过程
'//..........
'//..........
End SubPrivate Sub wskData_Close(Index As Integer)
'//关闭sock
Unload wskData(Index)
bBusySocks(Index) = False
End Sub
'//加载新sock
Load wskData(i)
wskData(i).LocalPort = 0
wskData(i).Accept requestID
'//做标记
bBusySocks(i) = True
Exit For
End If
NextbBusySocks(i)不懂这个的意思!!!!
所有不要Load/Unload , 最好在启动时一次创建所有的Winsockcome here:
http://support.microsoft.com/default.aspx?scid=kb;en-us;171843
但我至今不知道在SP6里头修正了没有