此為大四下,上修研究所課程-分散式系統的作業之一。作業內容是要求透過 RPC 的方式來建構一個聊天室。這和一般常用的 Socket 有點不太一樣,因為他是 Client 可以直接呼叫 Server 端的 Function。這樣程式寫起來感覺是比 Socket 簡單許多,但是就是一定要符合 RPC 的規格才行。而且 Server 端也要特殊的架構才可以執行,總之,這個作業讓我更了解上課老師所教的 RPC。編譯環境為 gcc,程式語言為 C。


  為了讓一個人說話大家都收的到,最後我是採用 Client 端定期向 Server 端要最新的訊息,為了不讓重複收到一樣的訊息,我替每筆訊息加上了 ID,Client 只向 Server 要比手上 ID 還大的訊息。而為了避免在打字或是在等待訊息的時候程式 Block 住,所以我採用了 select() 來達成多工執行,有點像是 Thread 但是又沒有他那麼複雜,可以說是簡單又好用。下圖為一方說話另一方馬上可以收到。



  而作業有提到可以發俏俏話的當作是 bonus,所以我也實作了這個部份,Server 送訊息給 Client 的時候,如果該筆為俏俏話,那只送給接受者,其他人不送。



  另外,為了可以固定打字的地方都維持在下方,訊息區保持在中間,還有色彩控制碼,我有用到了 ,他可以控制游標的位置,讓你可以在想要的地方輸出顯示,還可以讓輸出的字串上色,第一次使用他還因為不知道要在 gcc 的時候多加額外的參數讓我卡住了好一陣子。(如果可以用視窗程式設計就不用那麼麻煩了...)最後,因為訊息區有限,所以採用了 "循環" 的方式來顯示訊息,到底之後會回到最上面重新開始顯示,本來是要做到底之後就一直顯示在底部,只是將原有的訊息全部上移,這樣感覺會炫很多!但是後來時間不足所以就沒做了...下面是一些程式執行的畫面。



創作者介紹

程式之旅、職場之路...

qazq 發表在 痞客邦 PIXNET 留言(0) 人氣()