gpt4 book ai didi

go - 使用 getvar 时如何让 Zebra 打印机返回换行符?

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:49 24 4
gpt4 key购买 nike

我写了一个简单的 Go 程序来连接打印机,运行 get 命令

! U1 getvar "zpl.system_status"\r\n

然后我试图读取响应,但我的读取监听器一直超时。我期待在来自打印机的数据末尾有一个\n,但没有得到它。有没有办法告诉打印机响应并用\n 终止该行?

如果没有,听取响应的最佳方式是什么。我最终读取了流,然后设置了超时以等待更多数据,但这似乎有点老套。

是否有我可以等待的特定字符来指示打印机已完成发送响应?

我还手动登录了一个 telnet 客户端并看到了相同的行为。

这是我整理的代码。目前很艰难,只是想在我清理它之前让事情正常进行。它确实通过这段代码和注释掉的代码得到了响应,但我觉得我应该从服务器得到一个行终止符,但我没有。

package main

import (
"bufio"
"net"
"os"
"time"
)

func main() {
dialer := net.Dialer{Timeout: 1 * time.Second}
conn, err := dialer.Dial("tcp", "127.0.0.1:9100")
if err != nil {
println("Dial failed: ", err.Error())
os.Exit(1)
}
defer conn.Close()

rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))

println("Sending string request")
n, err := rw.WriteString("! U1 getvar \"interface.network.active.mac_addr\"\r\n")
if err != nil {
println("Error getting status.", err)
}
println("Characters sent: ", n)

err = rw.Flush()
if err != nil {
println("Error on flush", err)
}

err = conn.SetReadDeadline(time.Now().Add(1 * time.Second))
if err != nil {
println("Set Deadline failed: ", err)
}

// buffer := make([]byte, 0, 1024)
// tmp := make([]byte, 128)
// for {
// n, err := conn.Read(tmp[:])
// if err != nil {
// println(err)
// break
// }
// println(n)
// buffer = append(buffer, tmp[:n]...)
// }
// println(string(buffer))

response, err := rw.ReadString('\n')
if err != nil {
println("Read error: ", err.Error())
}
println("Response: ", response)
}

响应 - 我更改了下面的 mac 地址,但这基本上是我得到的。

Sending string request
Characters sent: 49
Read error: read tcp i/o timeout
Response: "07:4d:07:79:47:ef"

最佳答案

使用SGD的JSON包装:

发送 {}{"zpl.system_status":null}

响应将以 JSON 格式返回,您可以查找结尾

关于go - 使用 getvar 时如何让 Zebra 打印机返回换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51155091/

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