LINUX網絡編程之設計流程


1/基於多進程併發的面發連接服務器軟件的設計(TCP)

           (1) 不固定進程數的併發模型設計流程

            步驟1.主進程利用Socket創建主套接字server_socket並綁定到熟知的端口號。

            步驟2.主進程調用accept()函數在熟知的端口號上等待客戶端的連接。

            步驟3.當有客戶端請求到達是,主進程建立與該客戶之間的通信連接,這是accept()返回一個用於該連接的從套接字new_socket.

           步驟4.主進程創建一個新的從進程來處理該連接。

           步驟5.主進程關閉套接字new_socket(此時,由於從進程中仍然打開着從套接字,故主進程的關閉操作僅僅只是把從套接字new_socket的引用計數減1,而不是真正關閉該從套接字)。

          步驟6.主進程返回步驟2(繼續等待客戶端的連接)。

          步驟7.從進程關閉主套接字server_socket,(此時,由於主進程中仍然打開着主套接字,故主進程的關閉操作僅僅只是把從套接字server_socket的引用計數減1,而不是真正關閉該主套接字)。

          步驟8.從進程調用recv()和send()等操作與客戶端進行數據交換。

          步驟9.數據交互結束,從進程關閉從套接字new_socket.從進程結束。


       (2)固定進程數的併發模型設計

        1/父進程的設計流程

         步驟1.主進程創建主套接字server_socket並綁定到熟知端口。

         步驟2.主進程創建給定數目的從進程。

         步驟3.主進程調用wait()或者waitpid()等待從進程結束,一旦有從進程退出,則主進程立馬創建一個新的從進程,以保證從進程在數量上維持不變。


       2/從進程的設計流程

        步驟1.從進程調用accept()等待客戶端的連接。

        步驟2.當有客戶端請求連接到達時,從進程維持與該客戶端的通信連接,同時accept()調用返回一個新的從套接字new_socket.

       步驟3.從進程調用recv()和send()等操作與客戶端進行數據交互。

       步驟4.數據交互結束,從進程關閉從套接字new_socket.

       步驟5.返回步驟1.



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