一个关于UDP socket服务端接收长度不正确的问题

在UDP通信中,从嵌入式路由器到阿里云服务器的数据传输出现异常,服务端收到的消息比实际多出4或6个字节。tcpdump显示报文长度正确,尝试解决字节序、字节对齐等问题未果。将数值转换为字符串传输后问题解决,但原因未明。怀疑可能与字符集有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目需要实现一个通过UDP协议和远端服务平台通讯的需求,简要描述如下:
本端为嵌入式linux路由器(udp客户端,linux C编码),远端为租用的阿里云服务器(udp服务端,java编码),
通信协议为UDP,本端会定时向远端服务器发送消息。

在实现和调试过程中发现一个问题:
1)将远端服务程序放在实验室pc机上调试没有问题,即“路由器-PC”交互正常。
2)将远端服务程序放至阿里云服务器上运行,结果服务端收到的udp消息会多出4个字节,偶尔还会多出6个,多出的字节是 EF BF 之类的。
3)在远端服务器通过tcpdump抓包发现,tcpdump抓到的udp报文长度是正确的,并没有多出4个字节。
4)在检查并尝试字节序、字节对齐等问题后,仍然没有找到问题的原因。
5)最后,想到把消息中传输数值的地方,全部转换为字符串方式传输,结果问题没了,但是原因还无法确定。
6)在网上搜到一篇类似问题的帖子,但是,没有给出最终解决方案,链接如下:
       http://bbs.youkuaiyun.com/topics/370180910
   
1. 发现问题的代码实现,即消息传输中有数值
    unsigned char tmpBuf[DIAG_NOTIFY_LEN] = {0};
    unsigned short usCrc = 0, uslen = 0;
    
    memset(tmpBuf, 0, DIAG_NOTIFY_LEN);
    ((NotifyHeader *)(tmpBuf))->HeaderFlag = htons(DIAG_MSG_HEADER);
    ((NotifyHeader *)(tmpBuf))->MsgType = htons(DIAG_NOTIFY_MSG);
    ((NotifyHeader *)(tmpBuf))->Se
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值