[分享] 用socket實作的簡單聊天室

作者: thefattiger (LT)   2019-04-12 18:42:19
不知道這邊能不能分享自己的玩具小專案?
因為socket api很容易忘, 要用的時候又要查用法
所以自己寫了一個小專案當作備忘
https://github.com/LilTwo/ChatRoom
若有違規請告知我,我再刪文, 謝謝
簡單介紹:
Server及Client可以build出兩個binary,分別代表聊天室伺服器及使用者
先開啟Server後再用Client輸入對應的ip連進去就可以了
進去後預設的模式為公開, 送出的訊息所有user都看的到
打/p <username>送出後, 可以密語特定的user
再打/s可回公開模式
收到密語的人打/r可以回應
一些實作細節:
Client端是用state pattern維護public及private模式
Server端不管Client的狀態,只用prefix判斷訊息是哪個種類
例如:
<public>Hello Jay.
把Hello Jay. 送給所有User
<private><Jay>fuck you.
把fuck you只送給Jay
每種prefix對應到一個handler, 對映關係保存在一個叫prefix2handler的map
是用Macbook開發的,所以目前在Windows是無法編譯,標頭檔要換
暫時沒機會用到Windows, 將來有機會再加入
除了Socket外其他部分都是用標準的函式庫, 理論上很容易改
已知bug:
有時client斷線會送一些錯誤的訊息, 應該是thread沒有正確結束的關係
很久沒寫C++了,可能寫得有點髒
若有建議還請指教
作者: kishow01   2019-04-20 22:53:00
推分享

Links booklink

Contact Us: admin [ a t ] ucptt.com