vb6.0+access利用Winsock做服务器端和客户端的软件

2024-11-16 01:30:56
推荐回答(1个)
回答1:

自己定义一个结构体发字节流过去不就可以了。建议把字节流封包传输

如:
第1个字节 &HB1 表示包头开始标志
第2个字节 &H01 表示发送数据命令
第3-4个字节 &H0005 表示数据长度为5个字节
第5个字节 &H00 具体的数据第1个字节内容
第6个字节 &H00 具体的数据第2个字节内容
第7个字节 &H00 具体的数据第3个字节内容
第8个字节 &H00 具体的数据第4个字节内容
第9个字节 &H00 具体的数据第5个字节内容
第10个字节 &HB5 从包头开始逐个进行异或运算的“异或校检码”,校检数据的完整性用
第11个字节 &HB2 表示包尾
上面这个包主要由6个部分组成
1、包头 用来进行包的初始化识别
2、命令 扩展包协议用,如传输语句、传输控制指令、移动记录等
3、数据长度 我这里的例子是用两个字节表示长度,即最多一个包传输65536个字节的数据
4、数据区域 具体要传输的数据段落
5、异或校检码 为了检测数据的完整性,也可以用CRC16或CRC32等算法进行数据校检
6、包尾 用来完整识别一个包内容的结束标志
通过上面这个包结构,可以在数据包里放置小于65536个字节的内容进行传输
在处理传输数据时可以这么做:
Type SendReport
sr_head As Byte ' 固定为 &HB1
sr_cmd As Byte ' 命令
sr_size As Integer ' 数据大小
sr_data() As Byte ' 数据内容
sr_xor As Byte ' 异或校检码
sr_end As Byte ' 固定为 &HB2
End Type
Type SendRF
rs_type As Integer ' 字段类型
rs_NameSize As Integer ' 字段名称字节数
rs_name() As Byte ' 字段名称内容
rs_size As Integer ' 字段数据大小
rs_data() As Byte ' 字段数据内容
End Type
Type SendRS
rs_fcount As Integer ' 字段数量
rs_data() As SendRF ' 字段数据
End Type
...
然后把数据集的数据赋值到上面的机构体里,再把结构体的数据格式化到一个字节数组中,便可把这个字节数组发送出去,接收端只要根据格式提取出相关数据到结构体,就可以实现数据的还原过程。在过程里只要善用 CopyMemory API 就可以很容易实现这种过程的处理,如
Dim SR As SendReport
Dim SentBytes() as Byte
Dim i As Long
SR.sr_head = &HB1:SR.sr_xor = SR.sr_head
SR.sr_cmd = &H01:SR.sr_xor = SR.sr_xor xor SR.sr_cmd
SR.sr_size = &H05:SR.sr_xor = SR.sr_xor xor SR.sr_size
Redim SR.sr_data(4)
for i=0 to ubound(SR.sr_data)
SR.sr_xor = SR.sr_xor xor SR.sr_data(i)
next i
SR.sr_end = &HB2
Redim SentBytes(10)
CopyMemory SentBytes(0),SR.sr_head,1
CopyMemory SentBytes(1),SR.sr_cmd,1
CopyMemory SentBytes(2),SR.sr_size,2
CopyMemory SentBytes(4),SR.sr_data(0),5
SentBytes(Ubound(SentBytes)-1) = SR.sr_xor
SentBytes(Ubound(SentBytes)) = SR.sr_end
Winsock1.SendData SentBytes
当然上面只是封包的过程,没有设置具体的数据集数据,不过原理也差不多,也就是读写SendRF和SendRS结构的问题。具体的自己做做看吧。