【发布时间】:2017-02-24 09:30:05
【问题描述】:
我正在尝试通过 tcp 连接远程执行程序 我想在客户端服务器之间实时共享标准输出和标准输入。
我有以下没有错误处理的测试服务器:p 我知道,目前我无法执行带参数的程序, 但这很容易处理:)
package main
import (
"bufio"
"bytes"
"fmt"
"net"
"os/exec"
"strings"
)
func main() {
l, _ := net.Listen("tcp", ":420")
defer l.Close()
for {
// Wait for a connection.
conn, _ := l.Accept()
go func(c net.Conn) {
for {
msg, _ := bufio.NewReader(conn).ReadString('\n')
program := strings.Trim(msg, "\r\n")
cmd := exec.Command(program)
var b bytes.Buffer
cmd.Stdout = &b
//cmd.Stdin = &bi
cmd.Run()
c.Write([]byte(b.String() + "\n")) //not working
fmt.Println(b.String()) //working
}
//connection closed
c.Close()
}(conn)
}
}
你看,我尝试与 c.Write() 共享标准输出,但这不起作用。
我认为 cmd.Stdin 的另一个问题与 Stdout 的问题相同。 目前我没有实现任何标准输入函数。
谁能给我这个函数的提示或示例代码?
【问题讨论】:
-
你说“我尝试与 c.Write() 共享标准输出”是什么意思?
-
不确定这是否是您想要的,请使用
io.Copy,net.Conn作为源,os.Stdout作为目标。 -
@Flimzy 我的意思是我的代码示例中的以下部分:c.Write([]byte(b.String() + "\n"))
-
所以你的意思是当你写到网络时,什么都没有收到?
-
@Flimzy 是的,客户端没有收到输出,但服务器使用 fmt.Println(b.String()) 打印输出