多進程網絡編程

本文概述如何使 服務器同時 連接處理 客戶端們。

       即服務器的一個進程只負責接受 請求連接的客戶端。而具體如何跟各個客戶端發送數據交給自己創造的子進程去完成。

       用TCP協議來舉例。

       服務器在創造套接字,並用套接字創建監聽隊列後,陷入循環,循環裏負責的是隻要accept接受到了客戶端的鏈接,就會fork出一個子進程,子進程裏和客戶端去具體的send recv。而父進程則進入下一次循環裏繼續accept等待新的客戶端連接加入。

      由於父進程共享文件描述符,所以不必要傳遞文件描述符。

      父進程創建出子進程後,由於父子進程的pcb是淺拷貝,父子進程的pcb結構體 某一項成員指針struct file*  共同指向同一個struct file結構體,這個file結構體裏某個成員結構指針指向的struct m_iode纔是打開文件的各種信息,所以file結構體裏會有個 count成員 統計所有指向 file結構體的指針,只有所有指向file的指針都失效纔會徹底關閉這個文件,釋放佔用的 文件描述符,因此不僅要子進程close(c),父進程也要在進入下一次循環前close(c),這裏的c指的是accept返回的文件描述符。

   


    服務器端代碼:




客戶端代碼:



結果如下:

2個客戶端程序cli都同時連入


我們再看看是否能同時保持連接,同時發送單詞。



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章