go - 使用 golang 提取 TCP 负载中的自定义数据格式

标签 go tcp telnet

我有一个连接到 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,并且我正在朝着以下方向思考:

  1. 创建用于监听传感器接口(interface)模块IP和端口号的TCP服务器
  2. 提取有效负载并将其作为单独的参数打印出来,例如 preamblearticle number 等作为初学者的任务

我浏览了一些关于 TCP 服务器/客户端创建的博客文章,但它们只解决了有效载荷中的 string 问题。如何提取上述面向字节 的自定义负载?

附言

我可以理解,这可以通过 struct.packstruct.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/

相关文章:

json - 如何通过遍历 JSON 在 golang 中显示丢失的键?

go - axios 不发送 POST 到 golang api

json - Golang 解码 json 列表

c# - 在 C# 中设置 TcpClient 本地端点时出现问题

perl - 如何在 Perl 中从 telnet 屏幕抓取输出?

javascript - Node.js:telnet "Rock, Paper, Scissors"程序无法正常工作

email - 以编程方式向 MailHog 发送邮件

c - 使用 libevent 在 C 中实现 TCP 端口事件回调

python - bash 中的 TCP 客户端

linux - 如何在 perl 脚本中的 telnet 命令提示符下运行命令