Go 如何让Zebra打印机在使用getvar时返回新行字符?

Go 如何让Zebra打印机在使用getvar时返回新行字符?,go,tcp,zebra-printers,Go,Tcp,Zebra Printers,我写了一个简单的Go程序来连接打印机,运行get命令 ! U1 getvar "zpl.system_status"\r\n 当时我正试着阅读回应,但我的阅读听众一直在超时。我希望在来自打印机的数据末尾有一个\n,但没有得到它。是否有方法告诉打印机响应并用\n终止该行 如果没有,最好的倾听方式是什么。我最终读取了数据流,然后设置了一个等待更多数据的超时时间,但这似乎有点骇人听闻 是否有一个特定字符可以等待以指示打印机已完成发送响应 我还使用telnet客户端手动登录,并看到了相同的行为 这是我

我写了一个简单的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}


如果设备没有发送
\n
,则响应将以JSON返回给您,您可以查找结尾}

如果设备没有发送
\n
,请不要使用
rw.ReadString('\n')
。是的,我知道,但我想知道zebra何时发送完数据,或者是否有方法告诉zebra在发送完数据后发送一个。\n。这似乎没有为我返回任何信息。