我如何在 Go 中实现一个服务器,将每个输入行发送到标准输出?
package main
import (
"io"
"log"
"net"
)
func main() {
srv, err := net.Listen("tcp", ":2000")
for {
conn, err := srv.Accept()
go func(c net.Conn) {
//How to split here by lines ?
c.Close()
}(conn)
}
}
运行服务器后
./server
并运行远程登录
telnet localhost 2000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
test 123
foobar
我想在 stdout 上查看我启动服务器的位置:
test 123
foobar
我知道这段代码缺少错误处理,但这只是为了清楚地表明我正在尝试做什么。
最佳答案
由于 net.Conn
是一个 io.Reader
,您可以将其包装在 bufio.Reader
中并使用 该类型的 ReadString
方法。你的功能将变成
func(c net.Conn) {
f := bufio.NewReader(c)
for {
ln, err := f.ReadString('\n')
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
fmt.Print(ln)
}
c.Close()
}
(我不确定 stdout 是否在 Go 中同步;在单独的 goroutine 中循环的共享 channel 上发送行可能更清晰。)
关于networking - Go 中的服务器,重定向到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14082063/