为什么socket通信接收数据少1字节. 诚心求解

thorhero thorhero 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟现在在写个网管程序管理一台设备,用SOCKET通信(设备服务端,网管程序客户端)。以前这设备用的老系统,通信没有故障,什么问题都没有。
现在设备换了新系统,问题就来了,该设备与windows 2000的通信没有问题(只有1台机器是2000的),和XP的机器通信就会少接一个字节,而最后个字节是一个分号,是一个命令的结束符。没它就会解析出问题。现在的解决办法是让设备每次多发1字节,然后如果是2000机器接到多的字节就把它处理掉。但是老板不满意我这种做法。

我用delphi 和C都写过客户端程序,测试时发送握手命令。连接新系统结果是,只要程序在2000上运行,就收80字节,在XP上运行,就收79字节。
然后又测试老系统。结果是,都收到80字节。

本来应该就判断是他新系统出的问题,但是用SNIFFER截包看来,设备确实发了80个字节。我仔细对照了包的每个字段,觉得完全没有问题啊,唯一的一点区别就是新系统发XP的时候TCP包头多了12字节的options-padding,这就会导致XP少收1字节?

当时去调设备的时候急,就截了SNIFFER的4张图,分别是老系统发2000,老系统发XP,新系统发2000,和新系统发XP的,不知道怎么把图放出来。这个问题听着就很荒唐,百度也搜不到任何信息,周围高手纷纷表示没听说过,我都不知道怎么办了。
...全文
评论 63
收藏 已收藏
分享
返回顶部
thorhero
C++ 语言 65,214 成员 250,514 内容