●完成目標
1.以創立thread方式改寫原程式碼以fork在localhost傳送和接收訊息,並加上傳遞和接收檔案之功能。
2.了解建立thread比建立process的成本低。●程式測試及運作環境
系上csie1工作站
●測資,已附在壓縮檔內
1. 中時電子報首頁原始碼
2. 自訂測資test.txt
●此程式分成六個部分
1. main program
2. TCPecho
3. Send function
4. Listen function
5. GetFileLength function
6. Unsigned long to string
Main program 創立一個socket,設定開啟port和最大連線數,並進入TCPecho。
TCPecho設立兩個thread,分別執行Send和Listen function。
Send function使用創立的socket,可以送訊息,也可以送檔案。送檔案時必須先告訴對方檔案大小和名稱,所以會用到GetFileLength function。同時因為使用系統的write function,所以要將檔案大小unsigned long 型態轉換成string,才能傳,此時就需要Unsigned long to string function。
Listen function使用創立的socket,可以收訊息,也可以收檔案。收檔案時對方會告訴自己檔案大小和名稱,會使用系統的read function,如果同意則開始收,即收即寫入本地端同名的檔案;若不同意則雙方回到一般傳訊息模式。
Send function和Listen function送收檔案時,是採用送訊息的方式,所以和一般送純文字訊息一樣。
●測試方式
1.使用Server和Client所在資料夾的make重新編譯程式,輸入make即完成編譯和呼叫程式之動作。
2.傳送訊息:
2.1在server端輸入欲傳送之訊息,並查看client端是否收到。
2.2在client端以同樣方法傳送訊息,並查看在server端是否收到。
3.傳送檔案:
在任意一端(Client或Server),輸入SendFile:[yourfile],即可詢問對方是否要接收檔案,例如要傳送壓縮檔內的測資mainpage.htm,請輸入SendFile:mainpage.htm
如同意接收,接收端必須回答兩次yes才能接收檔案,發送端才開始傳資料;若不同意接收,則雙方回到傳訊息模式。
如欲終止程式,請按ctrl+c,即可結束程式。
沒有留言:
張貼留言