VB 用UDP协议接收数据

fuck-forever 2019-07-12 09:57:59
VB 用UDP协议接收数据,传输协议上说是有符号的16位整数,我在用winsock接收的时候应该用byte来接收在将数据按高低位组合ma(试过integer提示不符合的数据类型),还有传输的时候把数据包拆包发送了,我想问问这种情况下怎么接收数据?
...全文
427 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuck-forever 2019-07-16
  • 打赏
  • 举报
回复
引用 1 楼 现在还是人类 的回复:
接收到字节数组,然后用API函数 CopyMemory 把数据复制到指定类型或结构体,如:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
                                                    Destination As Any, _
                                                    Source As Any, _
                                                    ByVal Length As Long)

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim lpBuff() As Byte, _
        size_buff As Integer
    ReDim lpBuff(bytesTotal - 1)
    Winsock1.GetData lpBuff, vbByte + vbArray, bytesTotal
    CopyMemory size_buff, lpBuff(0), 2
    Debug.Print "integer:" & CStr(size_buff)
End Sub
多谢大哥!还有一个问题就是对方用UDP协议传输数据,112ms发送一个数据包,数据包122848字节大,他把数据包拆包发送,共分为349帧发,我应该怎么接收呢
fuck-forever 2019-07-16
  • 打赏
  • 举报
回复
引用 4 楼 现在还是人类 的回复:
你可以参考这个帖子我的一些处理理念 https://bbs.csdn.net/topics/360134040
好的,多谢啦。结帖啦
现在还是人类 2019-07-16
  • 打赏
  • 举报
回复
你可以参考这个帖子我的一些处理理念 https://bbs.csdn.net/topics/360134040
现在还是人类 2019-07-16
  • 打赏
  • 举报
回复
通常要保证数据的完整性就要依靠通讯协议或数据格式。 比如你可以定义数据结构,如: 先用4个字节为固定的包头,用来识别一个数据包的开始,例:0x00FFEE00 再用4个字节为数据大小,范围是 0-4294967295 也就是 0-4GB 的大小范围 然后开始传输你的数据 传输完指定大小的数据后用1-4个个字节作为数据校验码,如:CRC8/CRC16/CRC32校验等 最后再弄4个字节作为包尾,例:0x00EEFF00 这样接收数据时就可以通过这个特性做数据校验与分包了,具体过程可以参考单片机做串口通讯时的处理过程,很高效简洁的。
现在还是人类 2019-07-14
  • 打赏
  • 举报
回复
接收到字节数组,然后用API函数 CopyMemory 把数据复制到指定类型或结构体,如:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
                                                    Destination As Any, _
                                                    Source As Any, _
                                                    ByVal Length As Long)

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim lpBuff() As Byte, _
        size_buff As Integer
    ReDim lpBuff(bytesTotal - 1)
    Winsock1.GetData lpBuff, vbByte + vbArray, bytesTotal
    CopyMemory size_buff, lpBuff(0), 2
    Debug.Print "integer:" & CStr(size_buff)
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧