package main import ( "log" "net" ) var conns = make(map[string]net.Conn) func main() { //广播信息 go todirective() // handle error ln, err := net.Listen("tcp", ":9999") if err != nil { log.Printf("%v", err) } //监控连接 for { conn, err := ln.Accept() if err != nil { // handle error continue } // 加入连接池 conns[conn.RemoteAddr().String()] = conn log.Println(conn.RemoteAddr().String()) // 另起协程监听当前连接到达的信息 go handleConnection(conn) } } func handleConnection(c net.Conn) { for { read := make([]byte, 15) _, err := c.Read(read) if err != nil { continue } log.Printf("收到数据为:%s", read) } } // 把通道directive的信息,发送给正在连接的客户端 func todirective() { for { todirective := <-directive for k, conn := range conns { _, err := conn.Write([]byte(todirective)) if err != nil { delete(conns, k) break } } } }
转载于:https://my.oschina.net/wgc2010/blog/2960746