[C.C++] Socket Programming: MultiPerson Chat

  • Socket Programming: MultiPerson Chat
  • 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裡寫法。

    由於程式碼的邏輯環節還挺不單純的,所以請有興趣的人自行觀瞻啦!

    本程式我提供了下面的指令:

    • :n 更改名子
    • :t 更改聊天者
    • :i 查看自己的訊息
    • :? 說明支援
    • :q 離開

    因為是使用select()來達到多人連線的功能,自然程式的邏輯上就比較複雜一點點,也因此程式碼顯得很難看,且較不人性化,當然會這樣的原因也有可能是筆者我功力不足,還不是很了解socket programming的細節,所以產生這麼難看的程式碼。自然這整個程式裡仍然存在著許多要改善的地方,總之,這是個demo版,測試畫面如下:

    /*** Server *****/

    基本上Server除了重要訊息以外,能不顯示就不要顯示,以免造成負擔。

    /*** Client - xinyu ***/

    OK!我連上線了,第一步先取個名子。此時我要等待steven也上線,否則我要跟誰聊?(不好意思,這裡沒有實做誰已經上線了)。

    /*** Client - steven ***/

    Steven上線了,但是他設定完名子之後卻忘記要設定聊天者,但是這個時候xinyu已經把他設為聊天者並發送訊息過來(xinyu: hello),因為steven剛上線,且沒有聊天者,所以系統自動把他的聊天者設定為xinyu,steven可以透過輸入:t發現他的id為粉紅色,而xinyu為綠色。

    繼續聊天直到兩個人都下線時,Server上就會顯示如下的訊息:

    我想最起碼Server要顯示目前有多少人在線上。

    詳細的部份就請您自己編譯後玩玩看吧!

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas