我有Golang的问题,我要做的是打开与事务服务器的TCP连接,执行命令然后获取输出 .

我习惯用nc发送命令:

printf "COMMAND HERE" | nc HOST PORT

对于dev中的golang包装器,这是我当前的代码:

TransCommand := "printf \"cmd:list_cmds\\ncommit:1\\nend\\n\""
     conn, err := net.Dial("tcp", hostName+":"+portNum)

     if err != nil {
             fmt.Println(err)
             return
     }

     _, err = conn.Write([]byte(TransCommand))
    if err != nil {
            println("Write to server failed:", err.Error())
            os.Exit(1)
    }

    println("Writing to Trans : ", TransCommand)

    reply := make([]byte, 4096)

    _, err = conn.Read(reply)
    if err != nil {
            println("Write to Trans server failed:", err.Error())
            os.Exit(1)
    }

    println("Response from Trans : ", string(reply))


    fmt.Println(ioutil.ReadAll(conn))


    conn.Close()

它只返回一个输出,说TCP连接是打开的,我在Ruby GEM中使用相同的逻辑,它工作得很好:

def tcp_send_and_receive(native)
        socket = TCPSocket.new(@host, @port)

        while line = socket.gets
          break if line == "220 CONNECTED.\n"
        end

        socket.write(native)
        native_reply = socket.read
        native_reply
      end

Golang和Ruby实现之间有什么区别吗?如果没有,我可以使用TCP连接到服务器刺激命令的执行?