日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang实现聊天室(五)

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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() }

小結

  • 完成了服務端客戶端通信的基本模型
  • 客戶端建立連接,服務端存儲客戶端基本信息
  • 服務端根據map信息廣播消息
  • 下期目標

  • 指定用戶名作為唯一信息map
  • 從命令行接收發送信息
  • 服務端廣播唯一客戶端發送的信息,給除這個客戶端以外的客戶端信息
  • 當客戶端退出時,服務端監測,并從map刪除,廣播消息給其他客戶端
  • 客戶端可使用加密算法,對發送信息加密再發送
  • 總結

    以上是生活随笔為你收集整理的golang实现聊天室(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。