go tcp server

weiwenwang · 2018-04-23 21:43:16 · 1813 次点击

通常来说,用map。 然后要注意处理用户上线下线的情况。

#4
更多评论

问题还是有点意思的,可以考虑用 chan 来实现这个,下面是我写的代码,可以参考着写个更完善的。

package main

import (
    "bufio"
    "fmt"
    "io"
    "net"
    "os"
)

func main() {
    l, _ := net.Listen("tcp", ":8000")
    for {
        conn, _ := l.Accept()
        ch := make(chan string)
        go talk(conn, ch)
        go input(ch)
    }
}

func talk(conn io.ReadWriteCloser, ch chan string) {
    for c := range ch {
        fmt.Fprintf(conn, c)
    }
    fmt.Fprintf(conn, "closed, byebye.")
    conn.Close()
}

func input(ch chan string) {
    reader := bufio.NewReader(os.Stdin)
    text, _ := reader.ReadString('\n')
    for text != "#\n" {
        ch <- text
        text, _ = reader.ReadString('\n')
    }
    close(ch)
}
#2