如何通过Golang中的开放TCP连接执行命令

时间:2015-11-26 16:14:43

标签: linux sockets go tcp

我遇到了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连接来激发命令的执行吗?

0 个答案:

没有答案