我有一个连接到 Interface Module 的工业传感器通过 telnet
向最终用户提供信息。
远程登录配置
端口:10001
数据格式:小端
数据payload
Preamble - 32 bit
Article number - 32 bit
Serial number - 32 bit
Channels - 64 bit
Status - 32 bit
Frame number M / - 16 bit/ 16 bit
bytes per frame
Measuring value counter - 32 bit
Measuring value frame 1 - N * 32 bit
..
..
这应该在 TCP header (如果我理解正确的话)之后可用,即有效负载。
我正在尝试通过更多实际示例来学习 golang,并且我正在朝着以下方向思考:
- 创建用于监听传感器接口(interface)模块IP和端口号的TCP服务器
- 提取有效负载并将其作为单独的参数打印出来,例如
preamble
、article number
等作为初学者的任务
我浏览了一些关于 TCP 服务器/客户端创建的博客文章,但它们只解决了有效载荷中的 string
问题。如何提取上述面向字节 的自定义负载?
附言
我可以理解,这可以通过 struct.pack
和 struct.unpack
在 python 中实现,因此理解一些相关性将不胜感激
最佳答案
在上面链接的 pdf 文档的第 6.2 节中,有一个表格列出了您似乎在问题中列出的数据
我会将那个表转换成一个结构,然后用编码/二进制模块读入它。参见 https://golang.org/pkg/encoding/binary/#example_Read一个相关的例子
“所有测量值都以 Int32、Uint32 或 Float 形式传输,具体取决于所连接的传感器”可能最容易将它们作为 uint32 获取,然后稍后再进行转换
关于go - 使用 golang 提取 TCP 负载中的自定义数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53428674/