Go語言--簡單聊天室程式
阿新 • • 發佈:2022-05-04
/** * Created by Vicky.H on 13-12-6. * [email protected] */ package main import ( "fmt" "net" "strconv" "bytes" _ "bufio" _ "strings" ) var m map[string]*net.Conn func main() { m = make(map[string]*net.Conn, 10) listener ,err := net.Listen("tcp", ":8080") if err != nil { fmt.Errorf(err.Error()) return } defer listener.Close() index := 0 for { conn, err := listener.Accept() if err != nil { fmt.Errorf(err.Error()) return } name := "使用者:" + strconv.Itoa(index) defer connCloseHandler(name, conn) m[name] = &conn index++ go connHandler(name, conn) } }func connCloseHandler(name string, conn net.Conn) { conn.Close() delete(m, name) for key := range(m) { if key != name { (*(m[key])).Write(bytes.NewBufferString(name + " 離開房間n").Bytes()) (*(m[key])).Write(bytes.NewBufferString("當前房間人數:" + strconv.Itoa(len(m)) + "n").Bytes()) } } }func connHandler (name string, conn net.Conn) { conn.Write(bytes.NewBufferString("當前房間人數:" + strconv.Itoa(len(m)) + "n").Bytes()) for key := range(m) { if key != name { (*(m[key])).Write(bytes.NewBufferString(name + " 進入房間n").Bytes()) } } for { buf := make([]byte,1024) conn.Read(buf) msg := string(buf) conn.Write(bytes.NewBufferString("我說: " + msg).Bytes()) for key := range(m) { if key != name { (*(m[key])).Write(bytes.NewBufferString(name + " 說: " + msg).Bytes()) } } } }