记录毕设问题:1.socket通信中,遇到0x00数据,后面的数据全部丢失

记关于毕设:4G图像传输小车 遇到的问题
问题1:socket通信时,数据出现0x00则后面的数据,全部丢失。

在腾讯云上买了一个学生云服务器,价格低廉,9.5一个月。反正自己对它性能的要求不高,这个服务器只是用来做一个服务端。

小车采用的是双主控设计,IMX6ULL+STM32。
IMX6ULL配备上4G模块,与服务器进行socket通信。PC端作为控制端,同样是以socket方式,与服务器进行通信,最终实现pc端控制小车的目的。

但最近,在传送图像数据的时候,就遇到了一个奇奇怪怪的问题,特此记录。

问题描述:IMX6ULL在用socket传输数据时,云服务器接收数据的长度和IMX发送的数据完全不相等!例如一次发送512个字节,服务器接收到的长度却只有8个字节。
起初怀疑是通信中网速的问题,程序在读字段1的时候,字段2已经发送,但是被忽略。但后来发现,事情并不是这样。

在数据发送的过程中,只要数据碰到了0x00,后面的字符将会自动被截取忽略。

仔细一想,0x00,在大多数情况下,都是作为一个停止符~~~~

查看socket服务器端代码~
在这里插入图片描述
在发送和接收的代码中,并未用到strlen 这种以0x00为停止符。
所以问题应该不是这里。

继续查阅IMX端跑的QT代码~~~
在这里插入图片描述
哦嚯,发现问题了,这里在write的时候,居然使用了strlen函数,而strlen函数以0x00为停止符。
在这里插入图片描述
修改为.length之后,一切恢复正常!

但这是为什么呢?

对网上经常出现的几种求数组长度的方法进行了总结。
1.sizeof

  • 求变量占字节数,是操作符,不是函数
  • 例如定义char a[100]={‘1’,‘2’,‘0’,‘3’},在变量初始化时,便分配好了大小。
  • sizeof(a) = 100

2.length和size相同

  • 求string 类型的长度,遇到’\n’为止。无参数,
  • 用法:s.length(),s为string类型,length()为string的成员函数,
  • char a[100] ={‘1’,‘2’,‘0’,‘3’} , a.length() =4
  1. strlen
  • 这是求遇到"\0"为止的参数的长度,参数必须是char*类型,或者char类型的数组,int类型的数组不行,因为“strlen”:不能将参数 从“int”转换为“const char *”。
  • char a[100] ={‘1’,‘2’,‘0’,‘3’} , strlen(a) =2

编程习惯这一点,还是得好好注意一下呀。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值