先贴代码

发送端

struct DrogueFrame
{
    //字头
    uint8_t header[2];
    // 数据类型,假定本类型为1
    uint8_t type;
    // 帧编号
    uint8_t no;

// 高度
    double height;
    // 侧偏
    double sideoffset;
};

DrogueFrame drogue;
                drogue.header[0] = HEADER_BYTE_0;
                drogue.header[1] = HEADER_BYTE_1;
                drogue.type = 1;
                drogue.no = i;
                auto data = drogueData[i].split(",");
                drogue.height = data[0].toDouble();
                drogue.sideoffset = data[1].toDouble();
                // 发送数据
                udpSender->writeDatagram((const char*)&drogue, sizeof DrogueFrame, QHostAddress::LocalHost, droguePort);

接收端

char recvbuff[24];
    memset(recvbuff, 0, sizeof(recvbuff));

CString str_ip = GetIPAddr(&m_ip_add);
    UINT dwport = GetPort(&m_port_edit);

int ret = m_socket.ReceiveFrom(&recvbuff, sizeof(recvbuff), str_ip, dwport);

在这里接收的时候 ret的返回值是20,在这我们接收的数据应该是24才对。因为结构体默认会对齐 unsiged char 会自动对齐 double类型,打印显示a5 51 1 1 2.3.5.3, 前面数据4位都正常 后面两位数据错误,正常显现0.1开头的才对。这里测试后很多方法都不能正常显示。无奈只能看发送端的代码,发送端的代码是别人用QT写的。拿过来之后发现发送的那个结构体加了Pragma pack,至此接收端结构体加了 pack 关键字后解决了问题。其实很小的问题 就是简单的内存字节对齐。却足足让我找了3天没找出问题来。

个人建议最好不要用这样使用会破坏结构,如果程序很大,某个程序猿忘了告诉你,将导致你意想不到的后果。最主要的是很难排查,用了会优化内存,但是效率下降。

关于 socket收发数据一样 接收的数据是错误相关推荐

  1. 数据包接收系列 — 数据包的接收过程(宏观整体)

    本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个 ...

  2. linux udp接收不到数据,无法接收udp数据包

    我不知道是网络配置的问题还是我的软件出了问题.在 我有一个地址为192.168.4.83的设备.这个设备直接连接到我的pc linux服务器,它的地址是192.168.4.11.在 我想用python ...

  3. BGP in the datacenter, 数据中心的BGP,数据中心网络架构,Clos网络架构

    数据中心的BGP 说明: 这是最近在学习<BGP in the datacenter>.由于原文是全英文.所以在学习过程中,利用谷歌翻译和网易翻译,再把翻译不通的地方,加上自己理解稍微改了 ...

  4. linux socket接收不到16进制数据,C下通过socket收发十六进制数据解决办法

    C下通过socket收发十六进制数据 系统是在LINUX下,下位机发送十六进制数据过来 上位机怎么解析 把数据以十六进制的形式显示出来,发送十六进制又如何实现 ------解决方案---------- ...

  5. 设置非阻塞socket收发数据

    非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接.包括的函数有:read, readv, recv, recvfrom, recvmsg, write, wri ...

  6. 为什么socket接收大数据的时候接收不完全,出现丢包?

    为什么socket接收大数据的时候接收不完全,出现丢包? (1)TCP协议通信,接收方接收数据的前后次序与发送方一致,但数据包不一定一致.打个比方,发送方按顺序发送了2个数据包,接收可能仅接收1次就能 ...

  7. linux接收网络数据并存存储,linux网络数据包数据结构 Socket Buffer

    Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1.套接字缓存skb由两部分组成:(1)报文数据:它保存了实际在网络 ...

  8. 【python】-- Socket接收大数据

    Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ...

  9. 网络编程 - socket接收大数据

    通过socket,实现客户端发送命令,将服务端执行出的结果,反回到客户端,主要4个步骤: 1.服务端返回数据: 2.服务端返回数据的大小: 3.客户端接收返回数据的大小: 4.客户端按返回数据大小接收 ...

  10. Flutter 中 Dio 和 Socket 发送 和 接收 Protobuf 数据

    dio和socket Dio 使用 proto Socket 使用 proto Dio 使用 proto 在pubspec.yaml 安装 dio dio: ^4.0.6 编译protobuf文件 p ...

最新文章

  1. c语言新增学生信息无法输入密码,c语言问题,希望大家帮帮忙,急
  2. 一文看懂国产最大深度学习平台上新:35项全面升级,国内率先加持量子机器学习...
  3. 渗透中poc、exp、payload与shellcode的区别
  4. 中国人民大学_《组织行为学》_11怎样招到最合适的人
  5. risc-v 操作系统教程
  6. 有三AI 1000问回归,备战秋招,更多,更快,更好,等你来战!
  7. ELI5 和scikit-learn文本分类管道
  8. Docker (1) 基本概念和安装
  9. AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程
  10. 【报告分享】2019网红电商生态发展白皮书.pdf
  11. Python获取当前时间
  12. java搜索引擎框架_搜索引擎框架介绍
  13. stm32F407的串口6卡死问题
  14. live2d碰撞_Euclidの基本について
  15. ht城市介绍人口数量Html,城市人口热力图 城市热力图查询
  16. oracle 字符替换
  17. 读书:《有无之境:王阳明哲学的精神》
  18. 中国篆刻艺术孙溟㠭作品《无有中无尽藏》
  19. c语言控制数码管显示时间,单片机 控制 数码管显示
  20. device-mapper: remove ioctl on 320d408ca45023fc0 failed:设备或资源忙

热门文章

  1. 阿里架构大牛说:JVM从入门到入魔,就是这么简单
  2. 数据库管理员、系统分析员、数据库设计人员,应用程序员的职责是什么?
  3. 《Context and Attribute Grounded Dense Captioning》笔记
  4. 零刻数据提供多地优质BGP双线接入服务
  5. BGP多线和双线双IP服务器有什么区别? 哪个网站访问速度更快?
  6. python入门学习随记(十二)
  7. 历时两年,秘鲁四人调查团队发布反腐 AI
  8. 【deepin 20.1】终端的介绍
  9. 投影仪全国产化电子元件推荐方案
  10. 创建一个urdf机器人_ROS机器人Diego 1#制作(十六)创建机器人的urdf模型描述文件详解...