繁体   English   中英

我通过TCP帧发送的一半Modbus无效

[英]Half the modbus over tcp frame I send are invalid

我已经制作了一个c ++应用程序,我需要通过Tcp通信从该应用程序获取一些统计信息到Modbus设备。 TCP通信由套接字进行 ,我使用send()发送数据。

现在,一半的帧似乎无效:连接后的第一帧始终有效,然后第二帧始终为false ...依此类推。 每当我开始新的连接时,第一帧都是有效的。

所以我检查了Wireshark和数据方面的Modbus数据是否相同(除了正常的事务标识符)。 唯一表明问题的事实是,如果我在Wireshark选项中“允许子分解器重新组装tcp流”,则Wireshark不会将框架视为Modbus框架,我得到了一个新字段: “ 2 Reassembled TCP Segments( 29个字节):#79391(1),#79404(28)“ ,其中#79391是最后一个正确帧的帧号,而#79404是当前帧的帧号。

为了避免这种情况,我尝试通过允许TCP_NODELAY刷新tcp缓冲区,并且得到了完全相同的结果。 因此,如果有人知道如何以避免重组框架的方式发送数据,我很乐意尝试任何解决方案。

编辑:我已经解决了我的问题,当然,TCP没错。 但这是在做我不可能将缓冲区的无用数据添加到下一帧的事情。 长话短说,我没有发送正确数量的数据。

我已经解决了我的问题,当然,TCP没错。 但这是在做我不可能将缓冲区的无用数据添加到下一帧的事情。 长话短说,我没有发送正确数量的数据。 –朱利安·阿马尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM