- Socket Programming: MultiPerson Chat
- :n 更改名子
- :t 更改聊天者
- :i 查看自己的訊息
- :? 說明支援
- :q 離開
Download: unix_multiperson_chat.zip
沒想到才隔一天我就無聊到把Multiperson Chat程式給實做出來,當然還是得感謝Beej's Guide to Network Programming的selectserver.c範例,解決了我最苦惱的多人連線問題,也因此了解到fork(), pthread在socket programming裡的可行性部份。
整個程式是以一個Server對多個Client的架構,而基礎程式依然是沿用[C/C++] Scoket Programming : Non-Blocking Communat裡的範例,而核心select()程式碼則是參照Beej的selectserver.c裡寫法。
由於程式碼的邏輯環節還挺不單純的,所以請有興趣的人自行觀瞻啦!
本程式我提供了下面的指令:
因為是使用select()來達到多人連線的功能,自然程式的邏輯上就比較複雜一點點,也因此程式碼顯得很難看,且較不人性化,當然會這樣的原因也有可能是筆者我功力不足,還不是很了解socket programming的細節,所以產生這麼難看的程式碼。自然這整個程式裡仍然存在著許多要改善的地方,總之,這是個demo版,測試畫面如下:
/*** Server *****/
基本上Server除了重要訊息以外,能不顯示就不要顯示,以免造成負擔。
/*** Client - xinyu ***/
OK!我連上線了,第一步先取個名子。此時我要等待steven也上線,否則我要跟誰聊?(不好意思,這裡沒有實做誰已經上線了)。
/*** Client - steven ***/
Steven上線了,但是他設定完名子之後卻忘記要設定聊天者,但是這個時候xinyu已經把他設為聊天者並發送訊息過來(xinyu: hello),因為steven剛上線,且沒有聊天者,所以系統自動把他的聊天者設定為xinyu,steven可以透過輸入:t發現他的id為粉紅色,而xinyu為綠色。
繼續聊天直到兩個人都下線時,Server上就會顯示如下的訊息:
詳細的部份就請您自己編譯後玩玩看吧!