项目要求从一台机器读取现场数据发送到网络中心的服务器,采用UDP协议。根据上传要求,我将要发送的数据定义了一个相对复杂的结构,打算把用UDP发出去。从网上找了很多资料,介绍基本都是用copymemory实现。但是用示例代码总是报错,请大家帮忙详细讲解一下udp发送的代码该如何写。
我定义的数据结构如下:
'定义模拟量发送数据包
Private Type send_data_1
head As data_head
data() As Single
check As Integer
End Type'定义数字量发送数据包
Private Type send_data_2
head As data_head
data() As Single
check As Integer
End TypeDim AI_senddata, AI_redata As send_data_1
Dim DI_senddata As send_data_2
我定义的数据结构如下:
'定义模拟量发送数据包
Private Type send_data_1
head As data_head
data() As Single
check As Integer
End Type'定义数字量发送数据包
Private Type send_data_2
head As data_head
data() As Single
check As Integer
End TypeDim AI_senddata, AI_redata As send_data_1
Dim DI_senddata As send_data_2
接收之后从Byte()转回来
发送方:
Dim b() As Byte
ReDim b(LenB(TestStoreData(k)) - 1)
CopyMemory b(0), TestStoreData(k), LenB(TestStoreData(k))
sendWinsock.SendData b
’TestStoreData(k), 是我自己定义的结构体
接收方:
’定义一个跟发送方相同的结构体
Dim b() As Byte
ReDim b(LenB(TestStoreData(k)) - 1)
receiveWinsock.GetData b
CopyMemory TestStoreData(k), b(0), UBound(b) + 1
这样就可以实现自定义结构体的传送了,记得接受和发送的自定义结构体必须一模一样 包括顺序
我在程序里是这样声明的:
Private Declare Function VarPtr Lib "MSVBVM60" (var As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32 " Alias "RtlMoveMemory " (Destination As Any, Source As Any, ByVal Length As Long)这个是怎么回事啊?