但是都是复制来复制去,来来去去就那一两个例子,而且大都无法运行,方法不够简洁,给初学者带来一定的难度。
我也是刚接触vb不久的初学者,结合msdn对多连接的介绍,
于是就有了下面的例子(目 前最短的最好理解的,不信可以去Google比较一下)
原创by:Login 欢迎到小站www.host900.com进行讨论。完成于2010-1-18
客户端 (接受多个连接)
有不懂得可以加我QQ:672308444,我会详细解释。另外欢迎到小站www.mycrazy.ucoz.com进行讨论。
只有两个winsock控件,一个名为listener作为监听;另一个为listen(index属性设为0)控件数组,用来就受新的连接
(当有服务端连接时,会显示为新连接分配的listen控件数组的下标,下标从零开始)
(当有服务端发送数据时,会在窗体上显示发送数据的服务端被分配的listen控件数组的下标,下标从零开始)
客户端代码:
Dim upi As Integer '存放空闲listen控件的数组的下标,,[声明部分变量]
Public Sub findfreeandloadsck() '查找空闲的listen数组中空闲的控件并加载
'现在当前数组范围内查找空闲的listen
Dim i As Integer
For i = 0 To listen.UBound
If listen(i).State <> 7 Then
upi = i
listen(i).Close
MsgBox upi
Exit Sub
End If
Next i
'如果上面的没有找到,然后增加数组的大小,使用新的空闲listen
upi = listen.UBound + 1
On Error Resume Next
Load listen(upi)
End Sub
Private Sub Form_Load()
If listener.State <> 0 Then listener.Close
listener.LocalPort = 808
listener.listen
Private Sub listener_ConnectionRequest(ByVal requestID As Long) '使用listener作为listen的管理,为新的连接调用空闲的listen成员
Call findfreeandloadsck
listen(upi).Accept requestID
Private Sub listen_DataArrival(Index As Integer,ByVal bytesTotal As Long)
Print Index
测试时可以打开多个服务端分别连接客户端,我在本人的电脑上测试无误.
服务端
有两个文本框(接收连接ip和端口号名分别为ip和por t),三个按钮(用来断开和连接和发送数据,名分别为stop,conn和send),一个label(名为state)和一个winsock控件名为wsk
Private Sub Conn_Click() '连接按钮
If wsk.state <> 7 Then
wsk.Close
wsk.RemoteHost = ip.Text
wsk.RemotePort = port.Text
wsk.Connect
Private Sub send_Click() '发送按钮
If wsk.state = 7 Then
wsk.SendData sendText.Text
sendText.Text = ""
Private Sub stop_Click() '断开按钮
If wsk.state <> 0 Then wsk.Close
state.Caption = "连接状态:" & "[" & wsk.state & "]" & ":已断开"
Private Sub wsk_Connect()
state.Caption = "连接状态:" & "[" & wsk.state & "]" & ":已连接"
******************
**************** **
运行图:。