关于 socket收发数据一样 接收的数据是错误
先贴代码
发送端
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收发数据一样 接收的数据是错误相关推荐
- 数据包接收系列 — 数据包的接收过程(宏观整体)
本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的. 如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细. 本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个 ...
- linux udp接收不到数据,无法接收udp数据包
我不知道是网络配置的问题还是我的软件出了问题.在 我有一个地址为192.168.4.83的设备.这个设备直接连接到我的pc linux服务器,它的地址是192.168.4.11.在 我想用python ...
- BGP in the datacenter, 数据中心的BGP,数据中心网络架构,Clos网络架构
数据中心的BGP 说明: 这是最近在学习<BGP in the datacenter>.由于原文是全英文.所以在学习过程中,利用谷歌翻译和网易翻译,再把翻译不通的地方,加上自己理解稍微改了 ...
- linux socket接收不到16进制数据,C下通过socket收发十六进制数据解决办法
C下通过socket收发十六进制数据 系统是在LINUX下,下位机发送十六进制数据过来 上位机怎么解析 把数据以十六进制的形式显示出来,发送十六进制又如何实现 ------解决方案---------- ...
- 设置非阻塞socket收发数据
非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接.包括的函数有:read, readv, recv, recvfrom, recvmsg, write, wri ...
- 为什么socket接收大数据的时候接收不完全,出现丢包?
为什么socket接收大数据的时候接收不完全,出现丢包? (1)TCP协议通信,接收方接收数据的前后次序与发送方一致,但数据包不一定一致.打个比方,发送方按顺序发送了2个数据包,接收可能仅接收1次就能 ...
- linux接收网络数据并存存储,linux网络数据包数据结构 Socket Buffer
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb.它代表一个要发送或处理的报文,并贯穿于整个协议栈.1.套接字缓存skb由两部分组成:(1)报文数据:它保存了实际在网络 ...
- 【python】-- Socket接收大数据
Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ...
- 网络编程 - socket接收大数据
通过socket,实现客户端发送命令,将服务端执行出的结果,反回到客户端,主要4个步骤: 1.服务端返回数据: 2.服务端返回数据的大小: 3.客户端接收返回数据的大小: 4.客户端按返回数据大小接收 ...
- Flutter 中 Dio 和 Socket 发送 和 接收 Protobuf 数据
dio和socket Dio 使用 proto Socket 使用 proto Dio 使用 proto 在pubspec.yaml 安装 dio dio: ^4.0.6 编译protobuf文件 p ...
最新文章
- c语言新增学生信息无法输入密码,c语言问题,希望大家帮帮忙,急
- 一文看懂国产最大深度学习平台上新:35项全面升级,国内率先加持量子机器学习...
- 渗透中poc、exp、payload与shellcode的区别
- 中国人民大学_《组织行为学》_11怎样招到最合适的人
- risc-v 操作系统教程
- 有三AI 1000问回归,备战秋招,更多,更快,更好,等你来战!
- ELI5 和scikit-learn文本分类管道
- Docker (1) 基本概念和安装
- AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程
- 【报告分享】2019网红电商生态发展白皮书.pdf
- Python获取当前时间
- java搜索引擎框架_搜索引擎框架介绍
- stm32F407的串口6卡死问题
- live2d碰撞_Euclidの基本について
- ht城市介绍人口数量Html,城市人口热力图 城市热力图查询
- oracle 字符替换
- 读书:《有无之境:王阳明哲学的精神》
- 中国篆刻艺术孙溟㠭作品《无有中无尽藏》
- c语言控制数码管显示时间,单片机 控制 数码管显示
- device-mapper: remove ioctl on 320d408ca45023fc0 failed:设备或资源忙
热门文章
- 阿里架构大牛说:JVM从入门到入魔,就是这么简单
- 数据库管理员、系统分析员、数据库设计人员,应用程序员的职责是什么?
- 《Context and Attribute Grounded Dense Captioning》笔记
- 零刻数据提供多地优质BGP双线接入服务
- BGP多线和双线双IP服务器有什么区别? 哪个网站访问速度更快?
- python入门学习随记(十二)
- 历时两年,秘鲁四人调查团队发布反腐 AI
- 【deepin 20.1】终端的介绍
- 投影仪全国产化电子元件推荐方案
- 创建一个urdf机器人_ROS机器人Diego 1#制作(十六)创建机器人的urdf模型描述文件详解...