實驗內容
大綱
本實驗主要是利用主從式架構,connection-oriented連結方式,撰寫一個多群組聊天室。本實驗為了解主從式網路應用程式架構的基本實驗,為求了解透徹,請勿使用如 BCB、VC++、C#中現成的網路元件,用戶端和伺服器端間之通訊要自己寫。
目的
1. 認識並熟悉Windows Sockets API。
2. 利用Windows Sockets API(Winsock)以及簡易Windows programming技巧撰寫一個主從式架構的多群組聊天室。
設備
硬體:都有網路卡相連的兩台電腦。
軟體:任何視窗程式開發軟體,如.NET、Visual C++、Borland C++ Builder、Visual Basic、﹍ 等。
*實驗室及學校有提供Microsoft Developer Network (MSDN) Library讓同學使用。
原理
Socket Programming
實驗要求
預報
不需撰寫預報。請實際下載並使用Facebook即時通訊軟體,並將同組人員及助教設成好友。和助教與同組同學聊一下,介紹一下自己。
程式
程式中要有避免blocking的能力,用戶端必需具備下列功能:
- 可以和聊天室伺服器建立連線及切斷連線。
- 使用者可以開啟一個以上的聊天室。
- 使用者可以動態參加或離開一個或多個群組。
- 使用者可以得知每一個群組中其他人的身份,並看到同群組中其他人送出的訊息(當然也看不到其他沒有參加群組的訊息),亦可送訊息至有參加的任一群組。
伺服器端必需具備下列功能:
- 可以接受用戶端的建立連線請求,也可以隨時切斷連線。
- 可以接受用戶端動態加入、離開、或開啟某個群組。
- 顯示用戶端的靜態資料(例如:ID、IP、﹍等)。
- 收到某個用戶端送到某群組的訊息時,負責將其傳給同一群組的其他用戶端,使得參加同一群組的人可以看到其他人送出的訊息。
程式評分方式(需demo):
server部分:
- 穩定的完成對Client的服務。
- 若有特殊功能,請向助教說明。
client的部分:
- C-以上:連的進server。
- C 以上:Server可以廣播。
- C+以上:可以聊天。
- B-以上:可以建立聊天室,並允許他人加入。
- B 以上:可以傳遞悄悄話。
- B+以上:搭配有可愛圖示(不可愛也無所謂)或聲音。
- A-以上:有創意的介面設計或特別的功能。
- A 以上:可以傳檔或自定圖像。
- A+以上:有語音系統或視訊系統(即時串流)。
最後請將程式整理在一個資料夾(分類清楚),上傳至FTP上。
結報
每組一份、打字。
結報問題(合寫一份)
- 請分別敘述你設計之聊天室伺服器端與用戶端(1)規劃設計(2)運作方式(3)功能特色。
- 本實驗的聊天室程式是使用主從式架構。你覺得是否有其他可行的方式?若有,請用功能方塊圖說明將如何運作。
- 請簡單敘述connection-oriented(TCP)和connectionless(UDP)方式之流程。
- WinSock API中有部分具有blocking的特性,請敘述此一特性並說明你如何解決這個問題,是否有其他的解決方法?
在本實驗的過程中,很多同學歷經了程式的磨練與煎熬,也努力的學習如何設計並撰寫一個大型的程式。請說明(每人一份):
- 在文字聊天室的設計與規劃中,你(妳)學到了些什麼?
- 在文字聊天室的程式撰寫中,你(妳)學到了些什麼?
- 你到底為了你(妳)的組貢獻了些什麼?
- 心得、感想、或任何希望助教改進的地方?
- 請分析此實驗(請有內容與深度)並搭配程式結果說明。
- 到目前為止的網多生活,你(妳)有什麼想對助教說的嗎?(請仔細思考!助教會盡量努力幫忙或改進的!)
最後,也是最重要的,你的參考資料為何?如果是前人的作品加以改良?請詳細說明來源(請記得參考不是罪惡,但必須有自己的東西或貢獻)。
參考資料
Borland C++ Builder版
JAVA版
MFC版
.Net版
Winsock教學文件
Windows Socket速查筆記
MFC裡的Windows Sockets