networking - Go 中的服务器,重定向到标准输出

标签 networking tcp go

我如何在 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/

相关文章:

xml - 高语 : Refactoring xml tag definition in struct

java - 如何从 Process 启动服务器程序并知道端口开始监听?

c++ - 通过 TCP 套接字发送大的 Base64 字符串

c++ - winsock 错误 10049 尝试绑定(bind)

linux - 非阻塞 tcp 与 epoll 连接

go - 'go run -gcflags -m xxx.go' 的输出是什么意思

go - 如何查找和替换报价中的内容?

networking - 网络单元定义 : Fragment, 段、数据包、帧、数据报

java - 获取网络中某个 IP 地址的所有主机名

networking - 通过电路交换网络将 640,000 位的文件从主机 A 发送到主机 B 需要多长时间?