vb中利用winsock控件,tcp协议实现多服务端连接

关于vb中利用winsock控件,tcp协议实现多服务端连接的问题,网上的资料很多,
但是都是复制来复制去,来来去去就那一两个例子,而且大都无法运行,方法不够简洁,给初学者带来一定的难度。
我也是刚接触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 & "]" & ":已连接"

******************

**************** **

运行图:。


相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...