golang实现聊天室(五)
生活随笔
收集整理的這篇文章主要介紹了
golang实现聊天室(五)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
golang實現聊天室(五)
完成服務端廣播消息
server
package mainimport ("fmt""log""math/rand""net" )type Client_list struct {list map[net.Conn]string }func main() {client_list := Client_list{make(map[net.Conn]string, 0)}var conn, err = net.Listen("tcp","127.0.0.1:6888")if err != nil {return}for {c, err := conn.Accept()if err != nil {return}go client_list.Receive(c)} }//noinspection GoUnresolvedReference func (client_list *Client_list) Receive(c net.Conn) {for {reveive_byte := make([]byte, 256)lens, err := c.Read(reveive_byte)if err != nil {log.Fatal("Receive error")}reveive_byte = reveive_byte[:lens]fmt.Printf("%s\n", reveive_byte)client_list.BroadMessage(c)} }func (client_list *Client_list) BroadMessage(c net.Conn) {// 用戶信息唯一表,唯一標識碼user := rand.Int() % 2client_list.list[c] = string(user)// 遍歷map表for clientKey, _ := range client_list.list{if clientKey == c {continue}var _, err = clientKey.Write([]byte("服務器廣播消息"))if err != nil {log.Fatal("Wrong about abroad message")}}}client1
package mainimport ("fmt""log""net""time" )func main() {var conn, err = net.DialTimeout("tcp", "127.0.0.1:6888", 30*time.Second)if err != nil {log.Fatal("conn error")}for {conn.Write([]byte("user 2\n "))time.Sleep(5 * time.Second)re_message := make([]byte, 255)length, err := conn.Read(re_message)if err != nil {return}re_message = re_message[:length]fmt.Printf("%s\n", re_message)}conn.Close() }client2
package mainimport ("fmt""log""net""time" )func main() {var conn, err = net.DialTimeout("tcp", "127.0.0.1:6888", 30*time.Second)if err != nil {log.Fatal("conn error")}for {conn.Write([]byte("user 2\n "))time.Sleep(5 * time.Second)re_message := make([]byte, 255)length, err := conn.Read(re_message)if err != nil {return}re_message = re_message[:length]fmt.Printf("%s\n", re_message)}conn.Close() }小結
下期目標
總結
以上是生活随笔為你收集整理的golang实现聊天室(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都大熊猫繁育研究基地什么时候关门
- 下一篇: 一个自动检索插件的疑问 autocomp