LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2013年12月10日 22:12 本文热度 5665

通信程序通常都是采用Client/Server形式。这就要求作为服务器的主机可以同时处理多个客户的请求。因此在编写服务器程序时要添加多个Winsock控件。在开始我们先加入两个Winsock控件。其中一个用来侦听网上请求信号,取名为Listener;另外一个为初始的连接口,取名叫Sock(0)。注意,后一个控件要设为动态数组的形式,以后当客户增多时,可在这个控件基础上动态增加。由于受资源限制,我们在本例中设定最多可以同时接纳15个客户。客户机一般只与一个主机相连,因此程序只须一个Winsock进行连接就足够了。这个程序要用到的控件较少,除了Winsock和Form控件外,只须再添加Commmand控件即可。下面是具体程序和详细注释。
******************************
服务器程序
******************************
Option Explicit
定义常量
Const BUSY As Boolean = False
Const FREE As Boolean = True
定义连接状态
Dim ConnectState() As Boolean
Private Sub Form_Load()
ReDim Preserve ConnectState(0 To 1)
On Error Resume Next
ConnectState(0) = FREE
ConnectState(1) = FREE
’指定网络端口号
Listener.LocalPort = 1011
‘开始侦听
Listener.Listen
End Sub
Private Sub Listener_ConnectionRequest(ByVal requestID As Long)
Dim SockIndex As Integer
Dim SockNum As Integer
On Error Resume Next
Form1.Print requestID & "连接请求"
查找连接的用户数
SockNum = UBound(ConnectState)
If SockNum > 14 Then
Form1.Print SockIndex & ""
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)
Form1.Print SockIndex & "接受请求"
End Sub

客户断开,关闭相应的sock
Private Sub Sock_Close(Index As Integer)
If Sock(Index).State <> sckClosed Then
Sock(Index).Close
End If
ConnectState(Index) = FREE
Form1.Print Index & "close"
End Sub

接收数据
Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim dx As Double
Form1.Print "数据来自" & Index
Sock(Index).GetData dx, vbDouble
Form1.Print "dx=" & dx
End Sub

寻找空闲的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 Ifs
Next i
ReDim Preserve ConnectState(0 To SockCount + 1)
FindFreeSocket = UBound(ConnectState)
End Function

***************************
客户程序
’***************************
Option Explicit
发送数据
Private Sub command1_Click()
Dim dx As Double
dx = 23.9
sock.SendData dx
MsgBox ("data sended")
End Sub

Private Sub Form_Load()
远程主机名
sock.RemoteHost = "media2"
网络端口
sock.RemotePort = 1011
发出连接命令
sock.Connect
Command1.Enabled = False
End Sub

服务器关闭
Private Sub sock_Close()
MsgBox ("socket closed")
End Sub

连接成功
Private Sub sock_Connect()
MsgBox ("socket connected")
Command1.Enabled = True
End Sub

该文章在 2013/12/10 22:12:03 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved