用go實現併發聊天室

2021-08-18 11:41:31 字數 1078 閱讀 1913

還是老一套,go在網路模組的開發確實是便捷無比,使用goroutine的特性簡直是如魚得水,準備簡單的使用go做乙個cs的聊天室,整體**不到一千行,核心**可能就一兩百行,非常通俗易懂,能幫助我們學習goroutine的特性和感受tcp。

源**:

效果圖

服務端:

客戶端jack:

客戶端pony:

一 服務端

server.go

首先主程式埠都是從main開始:

func main()  else 

}

可以看到啟動服務端有兩步操作:getalluser獲取使用者和startserver啟動服務端

獲取使用者就是開啟本地檔案讀取的過程,關鍵是startserver,startserver首先createtcp創造乙個tcp連線。

然後datasent啟動伺服器廣播協程:用於廣播客戶端和服務端互動的所有資訊並中**送給相應客戶端,通過「-」分割解析判斷;

intomanager是啟動管理模組,接收輸入的資訊來判斷是管理員註冊還是登入,登入成功後開啟管理員管理模組admimmanager

connmanager啟動管理協程,一旦connection通道有連線斷開就會通知

然後conn, err := l.accept()啟動無限迴圈監聽連線,然後分別啟動recv接收資料和sentdata傳送資料的協程;

最後開啟userauth驗證協程,根據flag判斷是註冊還是登入

二 客戶端

client.go

client就更簡單了,建立連線後直接開啟資料接收和傳送協程,由使用者輸入資料判斷進行具體的操作

GO 小白之併發聊天室

因為沒有寫客戶端 可以在cmd中利用 nc u 來充當客戶端 廣播使用者上線 1 主go程中建立socket defer 2 迴圈監聽客戶端連線請求 3 有乙個客戶端鏈結 建立新go程處理客戶資料 4 組織使用者相關資訊 全域性變數 結構體 map channel 5 hadlconn 初始化新使用...

go 簡單聊天室

package main import fmt net strings time 建立使用者結構體型別 type cline struct var onlinemap map string cline 建立全域性 channel 傳遞使用者訊息 var message make chan strin...

用CSocket實現聊天室程式

基本上是照著書上做的 花了10天左右反覆閱讀 基本搞懂後才除錯 雖然書上有很詳細的 但是有些東西還是不全 比如標頭檔案 還有vc6.0和2005的小差別 比如unicode編碼問題 send函式的第2個引數要 2 還有書上也有錯的地方 當你理解了書上 時就能找出 敲完執行時還遇到了亂碼問題 在csd...