我发送的 tcp 帧上的 modbus 有一半是无效的
Half the modbus over tcp frame I send are invalid
我做了一个 c++ 应用程序,我需要通过 Tcp 通信从该应用程序到 Modbus 设备获取一些统计信息。TCP 通信是通过套接字进行的,我使用 send(( 发送我的数据。
现在一半的帧似乎是无效的:连接后的第一帧总是有效的,然后第二个帧总是假的......等等。每当我开始新连接时,第一帧都是有效的。
所以我检查了Wireshark,数据方面Modbus数据是相同的(除了交易标识符是正常的(。唯一表明问题的事情是,如果我在 Wireshark 选项中"允许子部门重新组装 tcp 流",Wireshark 不会将帧视为 Modbus 帧,我有一个新字段:">2 个重新组装的 TCP 段(29 字节(:#79391(1(、#79404(28(",其中 #79391 是最后一个正确帧的帧号,#79404 是当前帧的帧号。
为了避免这种情况,我试图通过允许TCP_NODELAY来刷新 tcp 缓冲区,我得到了完全相同的结果。因此,如果有人知道如何以避免重新组装帧的方式发送数据,我很乐意尝试任何解决方案。
编辑:我已经解决了我的问题,当然,TCP没有错。但它正在做一些我不可能在将缓冲区的无用数据添加到下一帧的事情。长话短说,我没有发送正确数量的数据。
我已经
解决了我的问题,当然,TCP没有错。但它正在做一些我不可能在将缓冲区的无用数据添加到下一帧的事情。长话短说,我没有发送正确数量的数据。– 朱利安·阿马尔
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 错误:无效的预处理指令 #i 的意思是 #if?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 从 'int' 到 'int*' CPP 的转换无效
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 数组下标的类型"float*[float]"无效
- 我发送的 tcp 帧上的 modbus 有一半是无效的