今天晚上趁了興頭把前端時間學的socket編程的代碼整理了下,簡單的例子,屬於socket編程入門級(本人正在學習中),感興趣的朋友可以下載看看。
:傳到CSDN的我的資源裡面去了http://download.csdn.net/source/1790488,不知道你們能下載不,要是有問題請留言。
本包中的例子在ubuntu9.04下使用gcc命令全部編譯通過,伺服器和用戶端均在本機上運行。若你使用的是windows系統下的VC編程,很遺憾,這些例子編譯可能無法通過,主要是因為庫檔案的不同造成。如果你真的對網路socket編程感興趣,建議你安裝linux環境,一份正版的ubuntu系統並不難獲得。
用戶端串連時採用./client 127.0.0.1。
關於程式原始碼,來自所學課本,我只是簡單的把它敲出來,希望能給沒有書籍資料的朋友一些協助。具體可參考《linux/unix網路編程》(中國水利水電出版社)。
下面是關於各個目錄中文檔的說明。
1.socket_message在socket_message中給出了用戶端向伺服器發送訊息的例子。沒有採用迴圈結構,發送一個訊息後用戶端就關閉連結並退出。
2.socket_file.tar在socket_file中給出了用戶端由伺服器擷取一個檔案的例子。
用戶端可按如下方式運行:./ctest 127.0.0.1 /home/user/test.txt >test
"/home/user/test.txt"代表test.txt的絕對路徑,">test"這句話表明獲得的結果輸出到test檔案中(用戶端所在目前的目錄下),若不加它,則擷取的檔案將直接顯示在終端介面上。
3.fock.tar關於多進程並發伺服器的例子。
為什麼用多進程,你可以嘗試運行例子1,開啟伺服器,看同時開啟多個用戶端進行message的傳遞,按照不同的順序試試。(只有當最先開啟的用戶端處理完,後面的message才能輸出顯示,而不管誰先發送的message)
在伺服器端顯示的是用戶端發送的原資訊,伺服器端將原資訊進行簡單的凱撒加密後送回用戶端顯示。
4.save.tar關於線程使用的例子(看到這你應該思考線程與進程的區別)
這裡讀者因該瞭解線程建立的一些函數及其使用,其中伺服器端源代中的void savedata(char* recvbuf,int len,char* cli_data)函數用於儲存用戶端發送的資訊。當用戶端結束後能把用戶端發送過的資訊顯示出來。(當然它可以用於在伺服器上儲存使用者通訊記錄,但需要完善改進。)
5.safe.tar這個例子是對於例子4的改進。例4中當有多個用戶端同時運行時,但其中一個用戶端退出,其資料可能無法顯示,這主要是伺服器代碼中的index這一靜態變數引起的(同一進程中所有線程共用相同的記憶體空間)。
另外在4、5例子中編譯請用如下格式:gcc -o test test.c -lpthead,因為pthread庫不是Linux系統預設的庫。