gpt4 book ai didi

c++ - 我发送的 modbus over tcp 帧有一半无效

转载 作者:行者123 更新时间:2023-11-28 02:35:41 26 4
gpt4 key购买 nike

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

现在有一半的帧似乎是无效的:连接后的第一帧总是有效的,然后第二帧总是假的……等等。每当我开始新连接时,第一帧都是有效的。

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

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

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

最佳答案

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

关于c++ - 我发送的 modbus over tcp 帧有一半无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27568119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com