
采用vbRichClient替代winsock进行局域网内多客户端的非GUI数据传输
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
本项目探讨了利用VB RichClient框架代替Winsock技术,在局域网环境中实现多客户端间高效、无图形用户界面的数据交换方法。
关于VBRichClient的教程在网上比较少,但这个库在实用性和稳定性方面都优于VB自带的Winsock控件,并且支持多客户端而无需使用Winsock控件数组或在各个窗体上放置Winsock对象;直接通过模块即可实现数据收发。要使用它,需要利用VB内置隐藏函数VarPtr()来获取内存指针(尽管VbMsdn中没有提及该函数,但实际上它的用法非常简单)。此外,VBRichClient 5.0.38版本包含了SQLite 3.9的支持。
在服务器端的代码简化后如下所示:要实现多客户端连接的功能,只需使用数组存储hSocket即可。
```vb
Option Explicit
Dim WithEvents sv As cTCPServer
Dim WithEvents udp1 As cUDP
Private cHsocket&
Private Sub Form_Load()
Set sv = New cTCPserver
sv.Listen sv.GetHost(127.0.0.1), 35912 监听本地端口35912
Debug.Print sv.GetHost() 获取服务器IP地址信息
Set udp1 = New cUDP 初始化udp对象并绑定到指定的端口上
udp1.Bind 127.0.0.1, 5616 本地监听UDP端口5616
End Sub
Private Sub sv_DataArrival(ByVal hSocket As Long, ByVal BytesTotal As Long, ByVal FirstBufferAfterOverflow As Boolean)
Dim d() As Byte, s$
ReDim d(BytesTotal - 1) 根据数据长度重新定义字节数组d
sv.GetData hSocket, VarPtr(d(0)), BytesTotal 从指定的套接字中读取数据到数组d
s = StrConv(d, vbUnicode) 将二进制形式的数据转换为字符串
Text2.Text = Text2.Text & s & vbCrLf 在Text控件上显示接收到的信息
Debug.Print 收到: & BytesTotal 调试打印接收到的字节数量
End Sub
Private Sub sv_TCPAccepted(ByVal hSocket As Long)
cHsocket = hSocket 保存客户端连接时返回的新套接字句柄
Text1.Text = Text1.Text & sv.GetPeerHostIPAndPort(hSocket) & vbCrLf 显示新连接的客户机信息
End Sub
Private Sub sv_TCPDisConnect(ByVal hSocket As Long)
Text3.Text = Text3.Text & sv.GetPeerHostIPAndPort(hSocket) & vbCrLf 当客户端断开时,将相关信息记录在Text控件中
End Sub
Private Sub udp1_NewDatagram(ByVal BytesTotal As Long, ByVal FirstBufferAfterOverflow As Boolean)
Dim d() As Byte, s$
ReDim d(BytesTotal - 1) 根据数据长度重新定义字节数组d
Text2.Text = udp1.GetData(VarPtr(d(0)), BytesTotal) 获取udp服务器接收到的数据
End Sub
```
客户端代码如下:
```vb
Option Explicit
Dim WithEvents cl As cTCPClient
Dim WithEvents udp1 As cUDP
Private cid&
连接到服务器的函数,cid用于存储连接ID。
Private Sub Command1_Click()
cid = cl.Connect(QgB1, 35912)
End Sub
断开与服务器连接的命令按钮事件处理程序
Private Sub Command2_Click()
cl.Disconnect cid 使用上一步获取到的cid断开连接。
End Sub
发送数据给服务器,通过文本框中的内容发送过去。
Private Sub Command3_Click()
Dim b() As Byte
b = Text1.Text 将Text控件的内容转换为字节数组
cl.SendData cid, VarPtr(b(0)), UBound(b) + 1 发送数据到服务器端的套接字cid上。
End Sub
UDP客户端发送消息函数:
Private Sub Command4_Click()
Dim d() As Byte
d = yessss 创建一个包含字符串的字节数组
udp1.RemoteIP = 127.0.0.1
udp1.RemotePort = 5616 设置远程UDP服务器地址和端口信息。
udp1.SendData VarPtr(d(0)), UBound(d) + 1 向指定的udp服务器发送数据
End Sub
初始化TCP客户端与UDP对象,绑定到本地端口3941上监听来自其他主机的数据包:
Private Sub Form_Load()
Set cl = New cTCPClient
Set udp1 = New cUDP 创建一个新的cUDP
全部评论 (0)


