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