最近项目需要实现一个通过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. 发现问题的代码实现,即消息传输中有数值
本端为嵌入式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