服務器開發之linux網絡編程---學習章節(一)

前言:

    近期學習了服務器相關的開發,平常主要擼c的程序,所以就下定決心研究了c的服務器開發,目的也在與鞏固c的基本知識。詳細分享如下,若有錯誤請指正,希望與大家探討,共同學習進步。

                                                           (服務器搭建的框架)

 一、關於http協議和xined服務

        1. HTTP協議大致解析(概念就不在抄襲了):

             請求服務器數據: 

            (1) GET /文件或目錄 HTTP/1.1  

            (2) 協議頭部分 (可選)

            (3)\r\n(協議頭結束)

             服務器應答瀏覽器:

            (1)HTTP/1.1 200 OK 

            (2)content-Type:回寫客戶端的數據的類型 

            (3)content-Length:回寫文件的長度(確保正確性,不然會無法顯示文件)

            (4) \r\n(協議頭結束)

            (5)迴應帶數據包

        2.HTTP常見的狀態碼和方法定義補充:

               常見狀態碼:

            (1)1xx:臨時響應並需要請求者繼續執行操作

            (2)2xx:成功處理了請求的狀態碼  

            (3)3xx:需要進一步操作,重定向

            (4)4xx:請求錯誤,妨礙了服務器的處理 

            (5)5xx:服務器在嘗試處理請求是發生內部錯誤

                方法定義:    

                 OPTIONS(返回服務器針對特定資源所支持的http的請求方法),

                 HEAD(向服務器索要與GET請求相一致的響應,響應體將不會被返回,

                                可以在不必傳輸整個響應內容的情況下,獲取響應消息頭中的元信息),

                 GET(向特定資源發出請求),

                 POST(向指定資源提交數據進行處理請求),

                 PUT(向指定資源位置上傳其最新內容),

                 DELETEL(請求刪除操作所標識的資源),

                 TRACE(回顯服務器收到的請求,診斷或測試),

                 CONNECTHTTP/1.1(預留將連接改爲管道方式的代理服務器)

           3. xinetd 守護進程:

                    daemon系統中的一個後臺程序,週期性做的執行耨寫任務,等待某個shijian事件的發生,

                不會隨用戶的註銷而退出。

                    創建守護進程:fork子進程,父進程結束,子進程setsid()脫離控制終端,修改權限文件描

                述符,重定向dup2()

            4. xinetd安裝,配置:

                     (1)在線安裝: sudo apt-get install xinetd

                     (2)判斷安裝是否成功:sudo aptitude show xinetd

                     (3)配置:sudo vi /etc/xinetd.d/xhttpd (注意三個統一)

sevice xhttpd

{

    socket_type = stream    (網絡套接字類型:流或者數據包)

    protocol      = tcp           (ip協議,tcp,udp)

    wait             = no            (取值 y?n)

    user             = nobody    (運行進程的用戶ID)

    server          = /home/hao/xhttpd     (執行的完整路徑)

    server_args  = /home/hao/file_dir     (傳遞給server的值)

    disable         = no        (用於默認的{}中禁止服務)

    flags             = IPv4     (所使用的互聯網協議)

                   }

           (4)    sudo vi /etc/services 在其中加入端口號(注意端口號不能與系統重用)
                    xhttpd     8000/tcp       #server
                    xhttpd     8000/udp      #server
           (5)    重啓xinetd 服務器 sudo service xinetd restart

           (6)    查看運行狀態 ps aux | grep xinetd

5. 分析xhttpd服務器實現功能:

    xinetd 在啓動 xhttpd 可執行文件時,傳入參數argv[1]---》配置文件server_args的值

    eg:./xhttpd /home/hao/dir/photo.jpg

    chdir();改變工作目錄 ---》 拼接 訪問文件的絕對路徑訪問

    讀取 http的協議頭,解析出請求的文件名

    標準輸入中讀取,

    得到請求文件名或者目錄

    判斷文件是否存在:

          存在:

                判斷待請求文件是什麼類型:(1)目錄:返回目錄列表,尋求對應的文件名稱

                                                            (2)文件:寫回應http協議頭 回寫文件內容

----------------------------------------------------------------------------------------------------------

<下節: 關於具體代碼xhttp執行文件的代碼詳解>

    

  


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