项目要求从一台机器读取现场数据发送到网络中心的服务器,采用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

解决方案 »

  1.   

    发之前转为Byte()
    接收之后从Byte()转回来
      

  2.   


    发送方:
    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
    这样就可以实现自定义结构体的传送了,记得接受和发送的自定义结构体必须一模一样 包括顺序
      

  3.   

    我用的精简版的vb,运行的时候提示找不到DLL入口点RtlMoveMemory in kernel32。 
    我在程序里是这样声明的:
    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)这个是怎么回事啊?