[求助] 关于LWIP(LAN8720)网络发送数据的问题

annysky2012   2019-8-27 23:09 楼主
悬赏 5 分 芯积分已解决

在做系统测试的时候发现,LWIP(LAN8720)发送十六进制数据时,当发送的数据中有0x00时,网络就判断一串数据结束啦。
例如,发送数据为:aa 55 05 00 00 00 03 00 05 00 12 55 aa,通过调试发送,网络发送的数据只有aa 55 05,后面的数据都没有发送。
意思就是遇到0x00,网络就认为是空数据。


现在的疑问就是,如果我要发送数据0,怎么办呢?
如果发送两个字节的数,例如发送数字3,十六进制为00 03,那怎么发送呢?


希望能够得到解答,急~~

没有什么不可以,我就是我,不一样的烟火! 

回复评论 (7)

你用的真的是LWIP的原生接口吗(write/send),原生接口必然带发送数据大小的,比如write (int fd, const void * buf, size_t count); 。感觉你使用了封装过的接口,而且接口里有strlen之类的字符串处理函数把发送数据截断了。

点赞  2019-8-28 09:38

使用write函数是不会出现上述情况的。

点赞  2019-8-28 10:38
引用: Ansersion 发表于 2019-8-28 09:38 你用的真的是LWIP的原生接口吗(write/send),原生接口必然带发送数据大小的,比如write (int fd, const v ...

的确使用的是strlen函数,但是我发送的数字0,而不是‘\0’呀!!!这是为什么呢?

没有什么不可以,我就是我,不一样的烟火! 
点赞  2019-8-29 09:58
引用: 加勒比海盗 发表于 2019-8-28 10:38 使用write函数是不会出现上述情况的。

没有试,我试试看

没有什么不可以,我就是我,不一样的烟火! 
点赞  2019-8-29 09:59
引用: 加勒比海盗 发表于 2019-8-28 10:38 使用write函数是不会出现上述情况的。

这个我还没试,我试试

没有什么不可以,我就是我,不一样的烟火! 
点赞  2019-8-29 10:15
annysky2012 发表于 2019-8-29 09:58 的确使用的是strlen函数,但是我发送的数字0,而不是‘\0’呀!!!这是为什么呢?

'\0' == 0

你那不是“数字0”,“数字0”的ASCII码是48。

还有一个很常见的错误,就是把strcpy当memcpy来用,也会发生截断

本帖最后由 Ansersion 于 2019-8-29 11:45 编辑
点赞  2019-8-29 11:43
引用: Ansersion 发表于 2019-8-29 11:43 annysky2012 发表于 2019-8-29 09:58 的确使用的是strlen函数,但是我发送的数字0,而不是‘\0&rsqu ...

说的非常有道理。 我发送的时候,使用strlen来判断发送数据的长度和申请内存。按道理应该按字节来进行申请的。我把strlen和sizeof两个弄混淆啦 。现在问题已经解决,谢谢您!

没有什么不可以,我就是我,不一样的烟火! 
点赞  2019-8-30 11:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复