go 簡單聊天室

2021-09-27 06:12:23 字數 1293 閱讀 9077

package main

import (

"fmt"

"net"

"strings"

"time"

) //建立使用者結構體型別

type cline struct

var onlinemap map[string]cline

//建立全域性 channel 傳遞使用者訊息

var message = make(chan string)

func writetoconnect(clnt cline, conn net.conn)

} func makemsg(clnt cline, msg string) (buf string)

func handlerconnect(conn net.conn)

onlinemap[netaddr] = clnt

//建立專門給當前使用者傳送訊息的go程

go writetoconnect(clnt, conn)

//傳送使用者上線訊息到全域性channel中

message <- makemsg(clnt, "login")

//建立乙個channel,用來判斷推出狀態

isquit := make(chan bool)

//建立乙個go程,專門處理使用者發出的訊息

go func()

if err != nil

msg := string(buf[:n-1])

if msg == "who" && len(msg) == 3

} else if len(msg) >= 8 && msg[:6] == "rename" else

hasdata <- true

}}()

for

} }func manager()

} }func main()

defer listener.close()

//建立管理者go程,管理map和全域性channel

go manager()

//迴圈堅挺客戶端連線請求

for

//啟動go程處理客戶端資料請求

go handlerconnect(conn)

} }

//執行服務

go run main.go

//執行客戶端

nc 127.0.0.1 8000

//更改使用者名稱

rename|newname

//使用者列表

who

go簡單聊天室的搭建

與一對一的設計思路類似,就是加了個執行緒的操作。1,伺服器端宣告乙個map,並開啟監聽埠 2,客戶端開啟監聽埠,同時連入伺服器端 3,在客戶端上給自己起乙個暱稱,並輸出,同時啟動乙個執行緒 4,伺服器端接收乙個暱稱,並存入map 5,宣告乙個空的字串,並寫入要 的訊息 6,伺服器端解析傳送的訊息 m...

go簡單聊天室的搭建

與一對一的設計思路類似,就是加了個執行緒的操作。1,伺服器端宣告乙個map,並開啟監聽埠 2,客戶端開啟監聽埠,同時連入伺服器端 3,在客戶端上給自己起乙個暱稱,並輸出,同時啟動乙個執行緒 4,伺服器端接收乙個暱稱,並存入map 5,宣告乙個空的字串,並寫入要 的訊息 6,伺服器端解析傳送的訊息 m...

簡單聊天室

include include include include include include include include include include pthread t thread 2 void send msg void ip msg if connect sockfd,struct ...