【问题标题】:How to send data packets like ACK and ENQ using golang如何使用 golang 发送 ACK 和 ENQ 等数据包
【发布时间】:2016-05-15 04:12:00
【问题描述】:

我正在编写一个到临床实验室机器的接口,它使用 ASTM 协议进行通信 (http://makecircuits.com/blog/2010-06-25-astm-protocol.html)。

首先,我尝试使用 golang 的 TCP Server 来接收数据。但无法弄清楚如何将 ACK 发送回实验室机器。我是golang的新手。有人可以建议我如何进行吗?

【问题讨论】:

  • 你确定ENQACK在这个上下文中指的是TCP数据包的类型吗? (ASTM E-1394 似乎没有任何开放规范)。该摘要使它看起来好像是基于 tcp 的文本协议,您只需将这些 ascii 代码写在行上,但没有描述物理层或传输层应该是什么。
  • 其实看那个页面上的示例顺序,<ENQ><STX><ETX><EOT>等代码都是ASCII字符。您只需要知道如何将它们写入网络连接吗?
  • 谢谢。那应该写。还需要通过实际的机器集成来检查它。但是我找到了一个ruby测试代码client.putc(0x06.chr),我们已经写了很久,这表明它只是ASCII字符。
  • 好的,你还有问题吗?如果是这样,请用一个例子来编辑这个,显示你遇到问题的地方。
  • 抱歉延迟回复。像这样发送 HEX ACK 效果很好。 c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 9600, Size: 8} conn, err := serial.OpenPort(c) conn.Write([]byte{0x06})

标签: go interface tcpserver


【解决方案1】:

您提供的链接中的协议适用于 RS232。通过 TCPIP 发送数据时,它是一个流(接收方必须知道数据何时结束)。通常在将 RS232 协议更改为 TCPIP 时,会在每条消息中添加一个标头,该标头是消息的长度(通常是两个字节),因此如果要发送 ASCII ACK,则发送三个字节,两个字节长度和一个字节数据。在写这个的时候你必须刷新缓冲区,因为这么小的数据包在你这样做之前是不会被传输的。

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2021-03-20
    • 1970-01-01
    相关资源
    最近更新 更多