我发送的tcp帧上的一半modbus无效

时间:2014-12-19 14:32:10

标签: c++ sockets tcp modbus

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

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

所以我检查了Wireshark,数据方面的Modbus数据是相同的(除了正常的事务标识符)。唯一指出问题的是,如果我允许子网段重新组装tcp流,那么Wireshark并没有将Frame视为一个Modbus帧。"在Wireshark选项中,我有了一个新字段:" 2重新组装的TCP段(29字节):#79391(1),#79404(28)" 其中#79391是最后一帧的帧号,#79404是当前帧的帧号。

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

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

1 个答案:

答案 0 :(得分:2)

我已经解决了我的问题,TCP当然没有错。但它正在做一些事我不可能将缓冲区的无用数据添加到下一帧。长话短说,我没有发送适量的数据。 - Julien Amar