Golang 构建简单 TCP 服务器

golang 提供了非常丰富的网络库,当然也包括最基础的 TCP 协议,简单的 TCP echo 服务:

package main

import (
    "bufio"
    "io"
    "net"
    "strings"
)

func handler(conn net.Conn) {
    _, err := conn.Write([]byte("Welcome guest.\r\n"))
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    for {
        data, err := bufio.NewReader(conn).ReadString('\n')
        if err == io.EOF {
            break
        }

        data = strings.TrimSpace(data)
        if strings.ToLower(data) == "quit" {
            conn.Write([]byte("bye ...\r\n"))
            break
        }

        _, err = conn.Write([]byte(data + "\r\n"))
        if err != nil {
            break
        }
    }
}

func main() {
    server, err := net.Listen("tcp", ":8090")
    if err != nil {
        panic(err)
    }

    defer server.Close()

    for {
        conn, err := server.Accept()
        if err != nil {
            panic(err)
        }
        go handler(conn)
    }
}

可以使用 telnet 来测试:

telnet localhost 8090