golang简易版聊天室
生活随笔
收集整理的這篇文章主要介紹了
golang简易版聊天室
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
功能需求:
創(chuàng)建一個(gè)聊天室,實(shí)現(xiàn)群聊和單聊的功能,直接輸入為群聊,@某人后輸入為單聊
效果圖:
群聊:
?
單聊:
?
服務(wù)端:
package mainimport ("fmt""net""strings" )type info struct {conn net.Connname string }var ch_all chan string = make(chan string) var ch_one chan string = make(chan string) var ch_who chan string = make(chan string) var infos map[string]info = make(map[string]info)func handle(conn net.Conn) {defer conn.Close()buf := make([]byte, 100)n, _ := conn.Read(buf)name := string(buf[:n])var oneinfo infooneinfo.conn = connoneinfo.name = nameaddr := conn.RemoteAddr().String()infos[addr] = oneinfomsg := name + "進(jìn)入聊天室"ch_all <- msgfor {n, _ := conn.Read(buf)if n == 0 {fmt.Printf("%s斷開(kāi)連接\n", addr)msg = name + "離開(kāi)聊天室"delete(infos, addr)ch_all <- msgfmt.Println(msg)return}if string(buf[:n])[0] == '@' {sli := strings.Fields(string(buf[1:n])) //隔開(kāi)who := sli[0]msg = strings.Join(sli[1:], "") //后邊的再拼接回去ch_who <- whoch_one <- name + "->me : " + msg //單發(fā)continue}ch_all <- name + "->all : " + string(buf[:n]) //群發(fā)} }func sendone() {for {who := <-ch_whomsg := <-ch_onefor _, v := range infos {if v.name == who {v.conn.Write([]byte(msg))break}}} } func sendall() {for {msg := <-ch_allfor _, val := range infos {val.conn.Write([]byte(msg))}} } func main() {listener, _ := net.Listen("tcp", ":9009")defer listener.Close()go sendall()go sendone()for {conn, _ := listener.Accept()fmt.Printf("%s建立連接\n", conn.RemoteAddr().String())go handle(conn)} }客戶端:
package mainimport ("bufio""fmt""net""os" )func scandata(conn net.Conn) {for {//設(shè)置可以讀取帶空格的myscanmyscan := bufio.NewReader(os.Stdin)buf, _, _ := myscan.ReadLine()if string(buf) == "q" {os.Exit(0)}conn.Write(buf)} } func main() {conn, _ := net.Dial("tcp", "127.0.0.1:9009")buf := make([]byte, 1024)args := os.Argsconn.Write([]byte(args[1]))go scandata(conn)for {n, _ := conn.Read(buf)fmt.Println(string(buf[:n]))} }總結(jié)
以上是生活随笔為你收集整理的golang简易版聊天室的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 经典文献阅读之--SuMa++
- 下一篇: 车牌号校验规则,包括新能源车