

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 第一章 概述</b></p><p> 如今,上網已成為最熱門話題,通過Internet,我們既能獲取信息又能發(fā)布信息,而迅速發(fā)展的Web技術更是給Internet應用提供了一個很好的發(fā)展方向。當今的許多應用都是基于web技術的,如電子商務、視頻會議、遠程醫(yī)療診斷等。由于HTMI 語言的標準統(tǒng)一性,只要在設備里建立一個微型web服務器,人們就可以使用現(xiàn)有的W
2、eb瀏覽器與該設備進行雙向交互、接收或發(fā)送信息。因此,針對微型web服務器的研究和應用,具有重大的意義,它為我們管理、控制和監(jiān)測各種各樣的設備提供了一個很好的途徑一基于Internet,也就是說,只要設備接入了Internet,我們就可以在世界上的任何地方十分方便地控制、操縱那些配備有微型Web服務器的設備。 </p><p> 1.1 課題意義、目的</p><p> WWW 是
3、World Wide Web (環(huán)球信息網)的縮寫,也可以簡稱為 Web,中文名字為“萬維網”。它起源于1989年3月,由歐洲量子物理實驗室 CERN(the European Laboratory for Particle Physics)所發(fā)展出來的主從結構分布式超媒體系統(tǒng)。通過萬維網,人們只要通過使用簡單的方法,就可以很迅速方便地取得豐富的信息資料。 由于用戶在通過 Web 瀏覽器訪問信息資源的過程中,無需再關心一些技術性的細節(jié),
4、界面簡單容易操作。長期以來,人們只是通過傳統(tǒng)的媒體(如電視、報紙、雜志和廣播等)獲得信息,但隨著計算機網絡的發(fā)展,人們想要獲取信息,已不再滿足于傳統(tǒng)媒體那種單方面?zhèn)鬏敽瞳@取的方式,而希望有一種主觀的選擇性?,F(xiàn)在,網絡上提供各種類別的數(shù)據(jù)庫系統(tǒng),如文獻期刊、產業(yè)信息、氣象信息、論文檢索等等。由于計算機網絡的發(fā)展,信息的獲取變得非常及時、迅速和便捷。 </p><p> 到了1993年,WWW 的技術有了突破性的進
5、展,它解決了遠程信息服務中的文字顯示、數(shù)據(jù)連接以及圖像傳遞的問題,使得 WWW 成為 Internet 上最為流行的信息傳播方式。 現(xiàn)在,Web 服務器成為 Internet 上最大的計算機群,可以說,Web 為 Internet 的普及邁出了開創(chuàng)性的一步, WWW 采用的是客戶/服務器結構,其作用是整理和儲存各種WWW資源,并響應客戶端軟件的請求,把客戶所需的資源傳送到Windows NT、UNIX 或 Linux 等平臺上。<
6、/p><p> 國際計算機互聯(lián)網也稱因特網(Internet),已有20多年的發(fā)展歷史,它的前身是美國國防計算機互聯(lián)網(ARPA),現(xiàn)已發(fā)展為一個全球性的計算機互聯(lián)網絡。該網是世界上信息資源最豐富的計算機網絡,被人們公認為是未來國際信息高速公路的雛形。 因特網上具有上萬個技術資料數(shù)據(jù)庫,其信息媒體包括數(shù)據(jù)、圖象、文字、聲音等多種形式;信息屬性有數(shù)據(jù)、交換軟件、圖書、檔案等門類;信息內容涉及通信、計算機、農業(yè)、生物、
7、天文、醫(yī)學、政治、法律、軍事、音樂等各個方面。 可以看出萬維網是Internet的一部份 實際上,WWW( World Wide Web ) 是一種建立在Internet上的全球性的、交互的、動態(tài)、多平臺、分布式、圖形信息系統(tǒng)。它只是建立在Internet上的一種網絡服務。它的開發(fā)最初是為了在科學家之間共享成果, 科學家們可以將科研成果以圖文形式方在網上進行共享。它的最基本的概念就是Hypertext(超文本),如果你用過W
8、indows上的任何一種在線幫助系統(tǒng)你就會比較了解它的結構了。 現(xiàn)在,WWW的應用已遠遠超出了原設想,成為Internet 上最受歡迎的應用之一。它的出現(xiàn)極大</p><p> 下圖顯示了星型和拓撲的網絡連接:</p><p> 本次設計就是需要完成一個簡易的WEB服務器的設計,實現(xiàn)web服務器基本功能: 頁面訪問請求響應、HTML文件的解析以及數(shù)據(jù)發(fā)送。所以在完成設計之前,
9、必須先了解WEB服務器設計的原理與結構</p><p> 1.2 WEB服務器現(xiàn)況</p><p> 目前在市場上有20到30種Web應用服務器,每種服務器在實現(xiàn)對象組件支持、 分布式計算、部署的速度和易用程度上采取了不同方式。 目前市場上主流Web服務器主要有以下幾種產品:</p><p
10、> 1.Apache,由SUN公司開發(fā)的Apache服務器可以運行在包括Linux等多種系統(tǒng)平臺之上。Apache支持許多特性,大部分通過編譯的模塊實現(xiàn),如很有用的URL重寫,定制日志文件以及過濾支持等。</p><p> 2.Zeus Webserver3.3.8 服務器,Zeus服務器在SMP (Symmetric Multi Processing的簡稱,意為對稱多處理系統(tǒng),內有許多緊耦合多處理器,
11、這種系統(tǒng)的最大特點就是共享所有資源) 環(huán)境下有優(yōu)秀的可伸縮性,并實現(xiàn)了常見的特性集合,如訪問控制、動態(tài)內容產生和安全等。</p><p> 3. iPlanet Enterprise Edition 4.1,Netscape公司開發(fā)的iPlanet具有現(xiàn)今高性能WEB服務器的特性,如具有很高的可靠性、可用性、可維護性,系統(tǒng)高度可擴展性等特點,相對其它WEB服務器iPlanet還提供更多的JAVA功能。</
12、p><p> 4.AOLserver 3.3.1 ,AOL公司開發(fā)的AOLserver 3.3.1是一個多線程、可升級和擴展的WEB服務器。</p><p> 5. Roxen WebServer 2.1.31,在Roxen中可以使用RXML語言生成動態(tài)網頁內容。RXML是函數(shù)形式的服務器端XML腳本語言,它由Roxen服務器解析并執(zhí)行。</p><p> 6.
13、Jigsaw,它由WWW組織(W3C)開發(fā),W3C組織負責研究和規(guī)定網絡協(xié)議的標準(如HTTP)。它使用JAVA語言開發(fā),是成功的面向對象、功能全面的服務器。因為Jigsaw不受測試平臺的限制,所以Jigsaw是一個具有活力的、擁有無限潛能的優(yōu)秀WEB服務器。</p><p> 在嵌入式系統(tǒng)的應用中,由于HTMI 語言的標準統(tǒng)一性,只要在設備里建立一個微型web服務器,人們就可以使用現(xiàn)有的Web瀏覽器與該設備進
14、行雙向交互、接收或發(fā)送信息。它為我們管理、控制和監(jiān)測各種各樣的設備提供了一個很好的途徑,只要設備接入了Internet,我們就可以在世界上的任何地方十分方便地控制、操縱那些配備有微型Web服務器的設備。</p><p> 在Internet上為了發(fā)布信息,用戶必須運行Web服務器程序。但現(xiàn)成的服務器程序有時候不能滿足所有人的要求,所以可以動手開發(fā)一個自己的Web服務器程序,其功能就可由設計者定制的功能和需求決定
15、了。</p><p> 1. 3 解決方案和所做主要工作</p><p> 本次設計就是需要完成一個簡易的WEB服務器的設計,實現(xiàn)web服務器基本功能: 頁面訪問請求響應、HTML文件的解析以及數(shù)據(jù)發(fā)送。所以在完成設計之前,必須先了解WEB服務器設計的原理與結構。</p><p> 一般來說,Web服務器通常由以下幾個部分組成:(1)服務器初始化
16、部分.這部分主要完成Web服務器的初始化工作,如建立守護進程、創(chuàng)建TCP套接字、綁定端口、將TCP套接字轉換成偵聽套接字,進入循環(huán)結構,等待接收用戶瀏覽器連接.(2)接收客戶端請求.由于客戶端請求以文本行的方式實現(xiàn),所以服務器一般也以文本行為單位接收.(3)解析客戶端請求.這部分工作比較復雜,需要解析出請求的方法、URL目標、可選的查詢信息及表單信息.如果請求方法為HEAD,則簡單地返回響應首部即可;如果方法是GET,則首先返回響應首部
17、,然后將客戶端請求的URL目標文件從服務器磁盤上讀出,再發(fā)送給客戶端。 (4)發(fā)送響應信息之后,關閉與客戶機的連接.</p><p> 在了解WEB服務器的基本結構后,就需要更進一步了解如何實現(xiàn)服務器與協(xié)議的連接,那就需要用到CSOCK,這也是本次設計中的核心與重點。通過SOCKET,利用VC++編程就能基本實現(xiàn)了簡易的WEB服務器的設計,并能在window系統(tǒng)下運行良好的運行,實現(xiàn)web服務器基本功能:頁面訪
18、問請求響應、HTML文件的解析以及數(shù)據(jù)發(fā)送。</p><p> 第二章 WEB服務體系結構</p><p> 2.1 WEB服務器基本構架</p><p> Web應用的基本構架包括瀏覽器、網絡和Web服務器。瀏覽器向服務器請求Web頁,Web頁可能包括由瀏覽器解釋執(zhí)行的客戶端腳本,而且可以與瀏覽器、頁內容和頁中包含的其他控件(Java Applet
19、、ActiveX控件和插件等)進行交互。用戶向Web頁輸入信息或通過超級鏈接導航到其它Web頁,與系統(tǒng)進行交互,改變系統(tǒng)的“業(yè)務狀態(tài)”。</p><p> 2.1.1 WEB服務器和瀏覽器</p><p> WEB 是基于請求和響應的系統(tǒng),它是在C/S(Client/Server)結構的基礎上發(fā)展而來的。為了實現(xiàn)世界范圍內的信息共享和發(fā)布,它規(guī)范了通訊協(xié)議,并規(guī)范、強化Client/S
20、erver兩端的系統(tǒng)功能,WEB為用戶在Internet上查看文檔提供了一個圖形化的,易于進入的界面,WEB是一種基于超文本傳輸協(xié)議(Hypertext Transport Potocol 簡稱HTTP)向計算機傳送多媒體信息(如文本、圖片、聲音、視頻、交互式應用程序)的Internet服務。同C/S結構一樣,WEB由兩部分構成,即WEB服務器端和WEB瀏覽器端,WEB服務器的主要功能是:創(chuàng)建、管理和維護WEB頁面,對瀏覽器的請求進行應
21、答并返回HTML頁,WEB瀏覽器(Browser)用來觀看WEB資源的客戶端軟件,主要負責請求,解釋并顯示WEB頁,其工作過程見圖2.1。</p><p> Web瀏覽器通??梢允褂昧餍械腎E或者其它的瀏覽器。服務器端的TCP/IP協(xié)議是操作系統(tǒng)內嵌的,其信息流符合HTTP協(xié)議。服務器中的HTTP引擎用來分析瀏覽器的請求消息,并根據(jù)請求做出相應的動作。這些動作包括向瀏覽器發(fā)送一些靜態(tài)頁面或調用一些應用服務程序。
22、對于服務器中的靜態(tài)web頁面,可以使用一些常用軟件如FrontPage等制作,以備Web服務器調用。而服務器中的應用服務程序則用來擴展服務器所提供的服務。從圖l中可以看出,微型web服務器的核心就是:HTTP引擎。</p><p> HTTP協(xié)議是一種網絡應用層的標準協(xié)議,Web瀏覽器和Web服務器之間的通信都是采用HTTP協(xié)議來實現(xiàn)的。因此只要是符合HTTP協(xié)議的通訊過程和數(shù)據(jù)內容,就可以使用瀏覽器作為客戶端
23、進行連接和傳遞。</p><p> 圖2.1 Web工作原理</p><p> 圖2.1 主要過程為:</p><p> WEB瀏覽器通過將URL發(fā)給WEB服務器請求信息;</p><p> WEB服務器響應請求,并返回給客戶機超文本標記語言(HTML)頁面;</p><p> WEB瀏覽器對超文本標記語言(
24、HTML)頁面進行解釋并顯示。</p><p> 2.1.2 WEB頁面</p><p> WEB頁面是WEB系統(tǒng)實現(xiàn)發(fā)布、進行管理的主要對象。WEB頁面像一個大的容器,將要發(fā)布的文字、圖片、聲音、動畫、視頻等多種媒體信息封裝到一起,供WEB系統(tǒng)實現(xiàn)發(fā)布,進行管理。對于WEB系統(tǒng)而言,在眾多的WEB頁面中,有一個稱為WEB主頁的頁面,它是訪問者瀏覽WEB系統(tǒng)的起點。每個WEB頁面都
25、具有唯一的地址,稱為統(tǒng)一資源定位符(URL),URL由存儲此頁面的計算機名和此頁面的確切路徑構成。</p><p> WEB頁面是超文本標記語言(HTML)編寫的。HTML是一種嵌入式語言,通過在普通文本中嵌入各種標記(TAG),使普通文本具有了超級文本的功能。根據(jù)WEB頁面的內容,可將WEB頁面分為三種類型:靜態(tài)頁面,動態(tài)頁面,目錄列表頁面。</p><p> 2.2 WEB系統(tǒng)的
26、基本原理是請求/響應</p><p> 客戶端,瀏覽器接受用戶輸入的網頁地址(URL)并進行分析,從而得到網頁的文件名字和存放網頁的計算機地址以及服務程序的端口號,首先根據(jù)計算機地址及端口號與服務器建立連接,然后把網頁名稱及瀏覽器本身的有關信息按照一定的格式組織起來,發(fā)給服務器,這就是‘請求’。比如用戶輸入http://kulin.ts/index.html,從而可知:</p><p>
27、 計算機名稱為kulin.ts根據(jù)這個名字能獲知其計算機地址</p><p> 端口號為80(http服務的默認端口號)</p><p> 頁面的文件名為index.html</p><p> 瀏覽器就與kulin上端口號為80的服務程序建立連接,并把類似下面的數(shù)</p><p> 據(jù)發(fā)過(作為服務‘請求’):</p>
28、<p> GET /index.htm HTTP/1.1</p><p> Accept:image/gif,image/x-xbitmap,application/vnd.ms-powerpoint,*/*</p><p> Accept-Language:ch</p><p> UA-pixels:800*600</p><
29、;p> UA-color:color16</p><p> UA-OS:Windows xp</p><p> UA-CPU:P41.6</p><p> User-Agent:Mozilla/2.0(compatible’MSIE3.01;Window XP</p><p> Host:kulin.ts</p>
30、<p> Connection:Keep-Alive</p><p> 其中第一行說明了文件名稱(index.html)、請求的類型(GET)及瀏覽器支持的協(xié)議版本(HTTP/1.0)</p><p> 服務器端接受到請求后,對其進行分析,解析出網頁的文件名稱及其他信息(比如請求的類型、處理要求等),根據(jù)網頁的文件名稱到磁盤上提取文件內容,把文件內容和一些必要的說明信息打
31、包后發(fā)給瀏覽器,然后斷開連接,這就是“響應”。(瀏覽器接到文件內容后就將其中的內容顯示出來了)比如對于文件長度為2559B的index.html來說,可以發(fā)送如下數(shù)據(jù)作為“響應”:</p><p> HTTP/1.1 200 OK</p><p> Server: kulin.ts-HttpSvr/1.1</p><p> Date:WED,20 may 20
32、06 12:45:21 </p><p> Content-type:text/html</p><p> Content-length:2559</p><p> Last-Modified:Sun,22 may 2006 14:21:50</p><p> <接下來是index.htm的文件內容></p>
33、<p> 上述數(shù)據(jù)分2大部分,第1部分為“頭”,其中,第1行是狀態(tài)行,包括服務器執(zhí)行的HTTP版本及本次響應的狀態(tài)碼。后4行分別說明了服務器名稱、當前日期、數(shù)據(jù)類型、數(shù)據(jù)長度、最后修改的日期和時間。第2部分為數(shù)據(jù)“體”,是“請求”要求傳送的數(shù)據(jù),它跟在1個空行之后。</p><p> 當然,客戶端和服務器之間還可能有一些中間環(huán)節(jié),比如代理服務器、網關、“隧道”等,在此我們先不予考慮。</p&
34、gt;<p> 2.3 WEB服務器/瀏覽器的通信</p><p> 要完成Web服務,除了網絡通信鏈路的建立和拆除,之外至少還要有二方面的功能:“分折請求” 和“構造響應”。客戶端與服務器交換數(shù)據(jù)之前,首先用TCP/IP建立連接,客戶端向服務器請求數(shù)據(jù),服務器則向客戶端響應并提供數(shù)據(jù).客戶端和服務器以HTTP協(xié)議進行請求和響應.服務器和客戶端只能為一次事務處理建立并維持連接,完成一次事務處理
35、后便結束連接.</p><p> 每一個客戶端向服務器發(fā)送請求均以方法(Method)開始,后跟對象的URL.客戶端一般要在上述信息中補充所采用HTTP協(xié)議的版本號,其后跟一個回車換行(CRLF)字符對.依據(jù)請求情況,瀏覽器可能在CRLF后加上瀏覽器按特別的首部格式編碼的信息.完成后,瀏覽器給請求加上一個CRLF.還可依據(jù)請求情況,把一個實體(MIME格式文檔)加到整個請求之后.一個HTTP方法實際上是一條命令
36、,客戶端用它來說明其請求目的,常用的有GET,HEAD和POST.</p><p> Web服務器收到請求并解析之后,以一個HTTP響應消息響應客戶端的請求.這個響應消息通常以HTTP協(xié)議版本號開始,后面是三位狀態(tài)碼和一個原因短語(Reason phrase),其后是一個CRLF,再后是請求的信息(它被服務器以一種特殊的首部格式編碼),最后,服務器加上一個CRLF.其后還可以有一個可選實體.狀態(tài)碼是三位數(shù),它描
37、述了服務器理解和滿足請求的情況,原因短語是狀態(tài)代碼的一個簡短說明.HTTP協(xié)議版本號、狀態(tài)代碼、原因短語一起構成了狀態(tài)行.</p><p> 上述分析不難看出,接收客戶端請求、解析客戶端請求、響應客戶端請求、向客戶端回送請求的結果是Web服務器所需完成的主要任務,Web服務器程序代碼主要是為了完成這幾項任務.</p><p> 2.3.1 分析請求</p><p&
38、gt; 如前文所述,“請求”的第1行數(shù)據(jù)是最重要的,它的格式是:</p><p> 方法 資源地址 HTTP版本號 回車換行</p><p> “方法”主要有3種:</p><p> GET:要求必須返回一定的內容。有時還必須根據(jù)“請求”的要求先對內容做一定的處理(比如解壓縮或根據(jù)時間進行過濾)。</p><p> HEA
39、D:處理辦法和GET完全相同,但要求只返回“頭”,而不可返回任何實質內容(“體”)。</p><p> POST:用來處理網頁的附屬內容,比如“注解”、數(shù)據(jù)回送等。</p><p> 作為簡單的服務器,我們只考慮第一行,且只處理GET請求,版本號不予理睬。</p><p><b> 2.3.2構造響應</b></p><
40、;p> 如前文所述,響應的第1行是狀態(tài)行,非常重要,格式如下:</p><p> HTTP 版本號 狀態(tài)碼 狀態(tài)文字說明 回車換行</p><p> 版本號可取HTTP/1.1;狀態(tài)碼是3位數(shù)字,根據(jù)情況按表2.1所示代碼取值。 </p><p> 表2.1 狀態(tài)碼值 </p><p> 作為簡易的服務器,“響應”可
41、以只返回狀態(tài)行和文件內容,即送回如下的內容:</p><p> HTTP/1.1 200 OK 狀態(tài)行</p><p><b> 一個空行</b></p><p> 文件內容 文件內容</p><p> 2.4 Winsock技術簡介</p><p> 套接
42、字是網絡通信的基本構件,提供了不同主機間進程雙向通 信的端點,如同電話,只有當一方撥通另一方時,雙方方能建立對話,而套接字正好比雙方的電話。通過Sockets 編程,程序可以跳過復雜的網絡底層協(xié)議和結構,直接編制與平臺無關的應用程序。隨著Internet 的廣泛應用,Sockets 已逐漸成為網絡編程的通用接口。</p><p> 因為Windows Sockets 主要是面向C/S 體系結構的,即客戶向服務器
43、發(fā)出請求,服務器只有在接收到請求后才能提供相應服務。雙方在建立對話前, 服務進程和接受服務的進程( 客戶)必須首先建立起各自用于網間進程通信的半相關,即一個三元組( 協(xié)議,本地地址,本地端口),但只有雙方獨立的半相關還不能建立起溝通。一個完整的網絡通信進程必須通過由兩個獨立進程組成的一個完整的全相關唯一確定方能得已實現(xiàn),而且,只有兩個性質相同的半相關才能建立一個完整的全相關五元組— —(協(xié)議,本地地址,本地端口,遠地地址,遠地端口),由
44、此方能建立起一個網間進程通信的實例。</p><p> 2.4.1 什么是Windows Sockets規(guī)范?</p><p> Windows Sockets規(guī)范是一套開放的、支持多種協(xié)議的Windows下的網絡編程接口。從1991年的1.0版到1995年的2.0.8版,經過不斷完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,
45、已成為Windows網絡編程上的標準。</p><p> Windows Sockets規(guī)范是建立在Bekeley套接口模型上的。這個模型現(xiàn)在已是TCP/IP網絡的標準。Windows Sockets規(guī)范是以U.C. Berkeley 大學UNIX中流行的Socket接口為范例而設定的一套Windows網絡接口編程。這個規(guī)范不僅包含了我們所熟悉的Berkeley Socket套接口風格的庫函數(shù),也包含了針對Wi
46、ndows的擴展庫函數(shù),這樣一來使程序員能充分利用Windows消息驅動機制進行相應的編程。</p><p> 應用程序調用Windows Sockets的API實現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網絡通訊協(xié)議功能和操作系統(tǒng)調用實現(xiàn)實際的通訊工作。它們之間的關系如圖2.2。</p><p> 圖2.2 應用程序與sockets的關系</p>&l
47、t;p> 2.4.2 Windows Sockets規(guī)范發(fā)展歷程</p><p> indows Sockets規(guī)范發(fā)展至今已經經歷了三個階段,首先是Windows Sockets1.0的發(fā)布,Windows Sockets 1.0代表了網絡軟件供應商和用戶協(xié)會細致周到的工作的結晶。Windows Sockets 1.0規(guī)范的發(fā)布是為了讓網絡軟件供應商和應用程序開發(fā)者能夠開始建立各自的符合Windows
48、 Sockets標準的實現(xiàn)和應用程序。</p><p> 為了更能滿足個系統(tǒng)的要求,有發(fā)布了之后的1.1版本Windows Sockets 1.1繼承了Windows Sockets 1.0的準則和結構,并且僅在一些絕對必要的地方作了改動。這些改動都是基于不少公司在創(chuàng)作Windows Sockets 1.0實現(xiàn)時的經驗和教訓的。Windows Sockets 1.1包含了一些更加清晰的說明和對Windows S
49、ockets 1.0的小改動。還有很多的改動就不做一一介紹了。</p><p> 現(xiàn)在大多的網絡編程的規(guī)范已經是Windows Socket 2,它在1.1上又有了更多的改動,具體的改動在這里也不做具體的介紹了。</p><p><b> 2.4.3 套接口</b></p><p> 套接口是從英文單詞socket翻譯過來的,它是網絡通信
50、的基本構件。套接口是可以被命名和尋址的通信端點,使用中的每一個套接字都有它的類型和一個與之相連的進程。</p><p> 套接口存在于通信區(qū)域中。通信區(qū)域也叫地址族,它是一個抽象的概念,主要用于將通過套接口通信的進程的共有特性綜合在一起。套接口通常和同一個域中的套接口交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序)。Windows Sockets規(guī)范支持單一的通訊域,即Internet域。各
51、種進程使用這個域互相之間用Internet協(xié)議族來進行通訊(Windows Sockets 1.1以上的版本支持其他的域,例如Windows Sockets 2)。</p><p> 套接口可以根據(jù)通訊性質分類;這種性質對于用戶是可見的。應用程序一般僅在同一類的套接口間通訊。不過只要底層的通訊協(xié)議允許,不同類型的套接口間也照樣可以通訊。用戶目前可以使用兩種套接口,即流套接口和數(shù)據(jù)報套接口。流套接口提供了雙向的,
52、有序的,無重復并且無記錄邊界的數(shù)據(jù)流服務。數(shù)據(jù)報套接口支持雙向的數(shù)據(jù)流,但并不保證是可靠,有序,無重復的。也就是說,一個從數(shù)據(jù)報套接口接收信息的進程有可能發(fā)現(xiàn)信息重復了,或者和發(fā)出時的順序不同。數(shù)據(jù)報套接口的一個重要特點是它保留了記錄邊界。對于這一特點,數(shù)據(jù)報套接口采用了與現(xiàn)在許多包交換網絡(例如以太網)非常類似的模型。</p><p> 2.5 VisualC++6.0簡介</p><p
53、> Visual C++是運行于Windows平臺上的交互式的可視化集成開發(fā)環(huán)境,它是美國Microsoft公司開發(fā)的Microsoft Visual Studio套件的一部分。跟其他的可視化集成開發(fā)環(huán)境(如Visual Basic、Delphi、C++ Builder)一樣,Visual C++ 6.0集程序的代碼編輯、編譯、連接和調試等功能于一體,給編程人員提供了一個完整方便的開發(fā)界面和許多有效的輔助開發(fā)工具。Visual
54、C++ 6.0的應用程序向導可以為很大一部分類型的程序提供框架代碼,用戶不用書寫程序代碼,只需按幾個按鈕就可以生成一些完整的可以運行的程序。</p><p> 第三章 系統(tǒng)設計</p><p><b> 3.1 界面設計</b></p><p> 正如包裝那樣,一個優(yōu)秀的軟件除了方便實用的功能外,其界面的優(yōu)秀設計也是必不可少的,因為
55、良好的界面形象一來能夠體現(xiàn)公司的形象和實力;二來能夠使用戶操作更為方便,具有說明性的圖表按鈕也能夠為用戶帶來使用的方便;三來能夠體現(xiàn)其軟件的良好特性和功能。</p><p> 目前軟件界面的發(fā)展潮流為圖形說明化和具體化,以前簡單和粗糙的簡單設計已經逐漸被淘汰,典型的如WindowsXP,其界面和Windows2000就有明顯的差別,圖形化的成分更多了,細致到每一個圖表都有其特定的功能含義。</p>
56、<p> 本次設計的WEB服務器端的程序軟件,雖然小,但也要盡量按照軟件界面設計的發(fā)展趨勢來完成,首先要方便簡潔,另用戶能很容易的上手操作,其次要盡量體現(xiàn)軟件的良好特性和功能。</p><p> 3.1.1界面設計要求</p><p> 對于應用軟件來說,一個基本現(xiàn)實就是:用戶界面是面向用戶的。用戶需要的是開發(fā)者開發(fā)的應用軟件滿足其需求,并且易于使用。界面設計的重要性有這
57、么幾個原因:首先,用戶界面越直觀,就越易用,越易用就越便宜。因為界面越好,培訓用戶就越容易,降低了培訓成本;界面越出色,用戶就越少求助,降低了客戶支持成本。其次,界面越出色,用戶就喜歡使用,增強了開發(fā)者工作的滿意度。 </p><p> 3.1.2界面制作方法</p><p> 該WEB服務器是通過C++編程來實現(xiàn)的。首先新建一個MFC Appwizard(exe)工程,然后建立一個
58、對話框。接著在對話框里面添加按鈕,列表框以及靜態(tài)文本框,改變各控件的名稱,調整對話框及各控件的大小,使界面美觀大方。</p><p> 3.2 偵聽模塊設計</p><p> 偵聽模塊是HTTP服務器很重要的模塊之一,它包括了服務器端的操作套接字,幫定端口,監(jiān)聽客戶端請求幾個部分,是服務器運行的關鍵部分。它的流程圖如下:</p><p><b>
59、請求</b></p><p><b> 偵聽模塊流程圖</b></p><p> 3.2.1服務器端操作Socket(套接字)</p><p> ?。ㄒ唬┰诔跏蓟A段調用WSAStartup()</p><p> 此函數(shù)在應用程序中初始化Windows Sockets DLL,只有此函數(shù)調用成功后,應用
60、程序才可以再調用其他Windows Sockets DLL中的API函數(shù)。在程序中調用該函數(shù)的形式如下:WSAStartup((WORD)((1<<8|1),(LPWSADATA)&WSAData),其中(1<<8|1)表示我們用的是WinSocket1.1版本,WSAata用來存儲系統(tǒng)傳回的關于WinSocket的資料。</p><p> (二)建立Socket</p&g
61、t;<p> 初始化WinSock的動態(tài)連接庫后,需要在服務器端建立一個監(jiān)聽的Socket,為此可以調用Socket()函數(shù)用來建立這個監(jiān)聽的Socket,并定義此Socket所使用的通信協(xié)議。此函數(shù)調用成功返回Socket對象,失敗則返回INVALID_SOCKET(調用WSAGetLastError()可得知原因,所有WinSocket 的函數(shù)</p><p> 都可以使用這個函數(shù)
62、來獲取失敗的原因)。 SOCKET PASCAL FAR socket( int af, int type, int protocol ) 參數(shù): af:目前只提供 PF_INET(AF_INET); type:Socket 的類型 (SOCK_STREAM、SOCK_DGR
63、AM); protocol:通訊協(xié)定(如果使用者不指定則設為0); 如果要建立的是遵從TCP/IP協(xié)議的socket,第二個參數(shù)type應為SOCK_STREAM,如為UDP(數(shù)據(jù)報)的socket,應為SOCK_DGRAM。</p><p><b> ?。ㄈ┙壎ǘ丝?lt;/b></p><p> 接下來要為服務器端定義的這個監(jiān)聽的Socket指定一個
64、地址及端口(Port),這樣客戶端才知道待會要連接哪一個地址的哪個端口,為此我們要調用bind()函數(shù),該函數(shù)調用成功返回0,否則返回SOCKET_ERROR。</p><p> int PASCAL FAR bind( SOCKET s, const struct sockaddr FAR *name,int&
65、#160;namelen );</p><p> 參 數(shù):s:Socket對象名;</p><p> name:Socket的地址值,這個地址必須是執(zhí)行這個程式所在機器的IP地址;</p><p> namelen:name的長度;</p><p> 如果使用者不在意地址或端口的值,那么可以設定地址為INADDR_
66、ANY,及Port為0,Windows Sockets 會自動將其設定適當之地址及Port (1024 到 5000之間的值)。此后可以調用getsockname()函數(shù)來獲知其被設定的值。</p><p><b> ?。ㄋ模┍O(jiān)聽</b></p><p> 當服務器端的Socket對象綁定完成之后,服務器端必須建立一
67、個監(jiān)聽的隊列來接收客戶端的連接請求。listen()函數(shù)使服務器端的Socket 進入監(jiān)聽狀態(tài),并設定可以建立的最大連接數(shù)(目前最大值限制為 5, 最小值為1)。該函數(shù)調用成功返回0,否則返回SOCKET_ERROR。</p><p> int PASCAL FAR listen( SOCKET s, int b
68、acklog );</p><p> 參 數(shù): s:需要建立監(jiān)聽的Socket;</p><p> backlog:最大連接個數(shù); </p><p> 服務器端的Socket調用完listen()后,如果此時客戶端調用connect()函數(shù)提出連接申請的話,Server 端必須再調用accept()
69、函數(shù),這樣服務器端和客戶端才算正式完成通信程序的連接動作。為了知道什么時候客戶端提出連接要求,從而服務器端的Socket在恰當?shù)臅r候調用accept()函數(shù)完成連接的建立,我們就要使用WSAAsyncSelect()函數(shù),讓系統(tǒng)主動來通知有客戶端提出連接請求了。該函數(shù)調用成功返回0,否則返回SOCKET_ERROR。</p><p> int PASCAL FAR WSAAsync
70、Select( SOCKET s, HWND hWnd,unsigned int wMsg, long lEvent );</p><p> 參數(shù): s:Socket 對象;</p><p> hWnd :接收消息的窗口句柄;</p><p>
71、 wMsg:傳給窗口的消息;</p><p> lEvent:被注冊的網絡事件,也即是應用程序向窗口發(fā)送消息的網路事件,該值為下列值FD_READ、FD_WRITE、FD_OOB、FD_ACCEPT、FD_CONNECT、FD_CLOSE的組合,各個值的具體含意為FD_READ:希望在套接字S收到數(shù)據(jù)時收到消息;FD_WRITE:希望在套接字S上可以發(fā)送數(shù)據(jù)時收到消息;FD_ACCEPT:希望在套接字S上收到
72、連接請求時收到消息;FD_CONNECT:希望在套接字S上連接成功時收到消息;FD_CLOSE:希望在套接字S上連接關閉時收到消息;FD_OOB:希望在套接字S上收到帶外數(shù)據(jù)時收到消息。</p><p> 具體應用時,wMsg應是在應用程序中定義的消息名稱,而消息結構中的lParam則為以上各種網絡事件名稱。所以,可以在窗口處理自定義消息函數(shù)中使用以下結構來響應Socket的不同事件: </p>
73、<p> switch(lParam) </p><p><b> {</b></p><p> case FD_READ:</p><p><b> … </b></p><p><b> break;</b></p><
74、p> case FD_WRITE、</p><p><b> …</b></p><p><b> break;</b></p><p><b> …</b></p><p><b> } </b></
75、p><p> (五) 服務器端接受客戶端的連接請求</p><p> 當Client提出連接請求時,Server 端hwnd視窗會收到Winsock Stack送來我們自定義的一個消息,這時,我們可以分析lParam,然后調用相關的函數(shù)來處理此事件。為了使服務器端接受客戶端的連接請求,就要使用accept() 函數(shù),該函數(shù)新建一Socket與客戶端的Socke
76、t相通,原先監(jiān)聽之Socket繼續(xù)進入監(jiān)聽狀態(tài),等待他人的連接要求。該函數(shù)調用成功返回一個新產生的Socket對象,否則返回INVALID_SOCKET。</p><p> ?。┙Y束 socket 連接</p><p> 結束服務器和客戶端的通信連接是很簡單的,這一過程可以由服務器或客戶機的任一端啟動,只要調用closesocket()就可以了,而要關閉Serve
77、r端監(jiān)聽狀態(tài)的socket,同樣也是利用此函數(shù)。另外,與程序啟動時調用WSAStartup()憨數(shù)相對應,程式結束前,需要調用 WSACleanup() 來通知Winsock Stack釋放Socket所占用的資源。這兩個函數(shù)都是調用成功返回0,否則返回SOCKET_ERROR。</p><p> 3.3 應答模塊設計</p><p> 用戶通過瀏覽器輸
78、入網頁地址(URL)來訪問服務器,而服務器就要求對其發(fā)送的請求進行相應的分析,分析客戶端的地址,端口,以及請求瀏覽的文件。所以本人所設計的主干程序為服務器工作線程函數(shù)Serverthread,它主要用于接受客戶請求的時候,利用多線程來進行處理。其他的函數(shù)還有瀏覽器請求函數(shù),顯示信息函數(shù),錯誤信息函數(shù),及事件處理函數(shù)等。最后實現(xiàn)的HTTP服務器具有一般HTTP服務器最基本的功能,可以發(fā)布用HTML語言編寫的網頁,用戶可以在已經建立了連接的
79、若干個網頁之間切換瀏覽。</p><p> 客戶端 服務器端</p><p><b> SYN</b></p><p><b> SYN ACK</b></p><p><b> ACK </b></p><
80、p><b> 三次握手原理圖</b></p><p> 3.3.1服務器工作線程函數(shù)Serverthread</p><p> 首先我們介紹服務器工作線程函數(shù)Serverthread的基本流程圖4.1(見下頁)。</p><p> 圖3.1服務器工作線程函數(shù)Serverthread流程圖</p><p>
81、 圖中很清晰的描述了服務器工作線程函數(shù)Serverthread的流程,此設計為簡易的WEB服務器所以只對HTML請求的第一行就行分析,對于剩下部分不做分析,還有該HTTP服務器還不能對CGI請求做出響應,也不能調用相應的ISAPI的DLL(動態(tài)連接庫)。只能發(fā)送最基本的靜態(tài)文本。</p><p> 3.4 系統(tǒng)托盤程序</p><p> 自從微軟公司推出Windows 95操作系統(tǒng)以
82、來,系統(tǒng)托盤應用作為一種極具吸引力的用戶界面設計深受廣大用戶的喜愛。使用系統(tǒng)托盤作為用戶界面的Windows應用程序數(shù)不勝數(shù),比如"金山詞霸"、"Winamp"、"RealPlayer"等等。</p><p> 本次WEB服務器的軟件設計為了用戶使用方便,使軟件界面更隨意和簡潔,我們也將引入系統(tǒng)托盤程序。</p><p> 系
83、統(tǒng)托盤程序運行時不顯示運行窗口,只在任務欄上顯示一個圖標,表示程序正在運行,用戶可以通過鼠標與應用程序交互,程序開發(fā)人員有時也需要編制一些僅在后臺運行的類似程序,為了不干擾前臺程序的運行界面和不顯示不必要的窗口,應使程序運行時的主窗口不可見。同時將一個圖標顯示在任務欄右端靜態(tài)通告區(qū)中并響應用戶的鼠標動作。該程序編譯運行后,如果雙擊托盤圖標,程序會彈出一個消息列表窗口,只要鼠標在托盤圖標上移動或點擊(無論是左右鍵的單擊或雙擊),產生的消息
84、都會顯示在這個窗口里;當鼠標光標移到托盤圖標上時,在圖標附近會顯示提示信息;單擊右鍵時彈出上下文菜單,這個菜單中應包含打開屬性頁的命令或者打開與圖標相關的其它窗口的命令,另外,該程序還可以動態(tài)的改變托盤的圖標。</p><p> 3.4.1 系統(tǒng)托盤程序實現(xiàn)方法</p><p> 為了實現(xiàn)拖盤程序,首先要使程序的主窗口不可見,這點實現(xiàn)起來十分容易,只要調用ShowWindow(SW_
85、HIDE)就可以了,本實例采用的就是這種方法,還有一種思路是通過分別設置主邊框窗口的風格和擴展風格來隱藏主框架: </p><p> BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) </p><p><b> { </b></p><p> cs.style =WS_POPUP
86、;//使主窗口不可見; </p><p> cs.dwExStyle =WS_EX_TOOLWINDOW;//不顯示任務按鈕; </p><p> return CFrameWnd::PreCreateWindow(cs); </p><p><b> } </b></p><p> 在任務條上顯示圖標是利用系統(tǒng)
87、API函數(shù)Shell_NotifyIcon()來將一個圖標顯示在任務欄的通告區(qū)中。該函數(shù)的原型為: </p><p> BOOL Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid); </p><p> 該函數(shù)的第一個參數(shù)dwMessage類型為DWORD,表示要進行的動作,它可以是下面的值之一: </p>&l
88、t;p> NIM_ADD: 添加一個圖標到任務欄。 </p><p> NIM_MODIFY: 修改狀態(tài)欄區(qū)域的圖標。 </p><p> NIM_DELETE: 刪除狀態(tài)欄區(qū)域的圖標。 </p><p> NIM_SETFOCUS: 將焦點返回到任務欄通知區(qū)域。當完成用戶界面操作時,任務欄圖標必須用此消息。例如,如果任務欄圖標正顯示上下文菜單,但用戶
89、按下"ESCAPE"鍵取消操作,這時就必須用此消息將焦點返回到任務欄通知區(qū)域。 </p><p> NIM_SETVERSION:指示任務欄按照相應的動態(tài)庫版本工作。 </p><p> 第二個參數(shù)pnid是NOTIFYICONDATA結構的地址,其內容視dwMessage的值而定。這個結構在SHELLAPI.H文件中定義如下: </p><p&
90、gt; typedef struct _NOTIFYICONDATA { </p><p> DWORD cbSize; // 結構大?。╯izeof struct),必須設置 </p><p> HWND hWnd; // 發(fā)送通知消息的窗口句柄 </p><p> UINT uID; // 圖標ID ( 由回調函數(shù)的WPARAM 指定) </p&g
91、t;<p> UINT uFlags; </p><p> UINT uCallbackMessage; // 消息被發(fā)送到此窗口過程 </p><p> HICON hIcon; // 任務欄圖標句柄 </p><p> CHAR szTip[64]; // 提示文本 </p><p> } NOTIFYICONDA
92、TA; </p><p> 這樣,在WEB服務器源程序里,添加用戶自定義消息以及消息函數(shù),托盤程序就實現(xiàn)了。</p><p> 3.4.2 托盤程序的實際運行</p><p> 通過上述方法,我們設計所需要的托盤基本功能就能實現(xiàn)了,即在系統(tǒng)選項中設置后臺運行項目,在用戶單擊后,WEB服務器界面將被一個小圖標代替,隱藏至Windows右下角的任務欄,在用戶需要
93、關掉服務器軟件的運行時,則只需要左鍵單擊任務欄服務器圖標即可關掉運行中的軟件。</p><p> 實際操作中,在向WEB服務器源程序中添加用戶自定義消息、消息函數(shù)以及托盤程序后,運行的結果是在用戶單擊后臺運行選項后,服務器運行界面被一個小圖標代替,隱藏至Windows右下角的任務欄,但是在鼠標左鍵單擊任務欄服務器圖標時候,卻無法響應,而導致服務器軟件無法正常關閉。</p><p> 首
94、先,我認識到,實際的托盤程序即服務器運行界面被一個小圖標代替,并隱藏至Windows右下角的任務欄的程序并沒有錯,很有可能是自定義消息或者是自定義函數(shù)出了問題,于是,我又開始排查自定義消息以及函數(shù)的問題,經過反復驗證與檢查,并沒有發(fā)現(xiàn)自定義消息或者是自定義函數(shù)出現(xiàn)問題。我又開始尋找響應鼠標單擊消息的問題,可是也沒有查出問題,最終系統(tǒng)托盤程序還是沒有實現(xiàn)鼠標的響應,但我仍然在努力尋找出現(xiàn)的問題與解決方法。</p><p
95、><b> 第四章 系統(tǒng)實現(xiàn)</b></p><p> 4.1 服務器運行結果</p><p> 在完成各個模塊的構建之后,就基本完成和實現(xiàn)了這個WEB服務器的功能,首先我們運行VC++最后編譯出的可執(zhí)行文件,運行服務器,并開始開啟WEB服務器功能,如圖4.1所示:</p><p> 圖4.1 開啟WEB服務器功能</p&
96、gt;<p> 這樣HTTP服務器開始工作了,在左下腳的狀態(tài)提示框里顯示開始偵聽連接。</p><p> 服務器運行之后,我們可以通過各種選項來改變服務器的設置,達到不同要求的需要,如圖4.2:</p><p> 圖4.2 服務器選項設置</p><p> 在普通一欄中可以通過可選項來改變服務器設置,使服務器是否記錄訪問記錄以及在主頁面是否顯示
97、根目錄下的文件夾列表。如圖4.3所示:</p><p> 如圖4.3 服務器可變選項</p><p> 在根目錄一欄我們可以自己設置服務器的根目錄存放地址與文件夾名稱,里面存放的是用戶的訪問的資源。如圖4.4所示:</p><p> 圖4.4服務器根目錄選項</p><p> 在服務器名稱這一欄中,我們可以選用默認服務器名稱(即服務器
98、運行的計算機名稱),也可按照要求或者需要改變服務器的名稱,同時,我們也可以設置端口號來改變監(jiān)聽的端口。如圖4.5所示:</p><p> 圖4.4服務器名稱以及端口號的改變</p><p> 之后我們在瀏覽器的地址欄中輸入我們所架設的服務器的地址,即http://531ok(http://后接的是運行WEB服務器軟件的計算機明名),別的聯(lián)網用戶也可以通過輸入正確的地址來請求訪問資源。用
99、戶發(fā)送的請求發(fā)送給服務器,服務器就會記錄下訪問者的地址,時間以及請求的信息,這些信息都會顯示在LISTBOX中,具體信息如圖4.3所示。</p><p> 圖4.2記錄請求信息</p><p> 服務器會記錄下了訪問者的信息,在用戶輸入地址后,后首先見到設計者的主業(yè)面,顯示了在根目錄下可供瀏覽的文件的名稱,大小,上次修改時間以及歡迎信息等,具體信息如圖4.4所示:</p>
100、<p> 圖4.3主頁面具體信息</p><p> 4.2 編譯程序時的問題以及解決方法</p><p> 1.編譯可以通過而不能鏈接</p><p> 在編譯成功后卻出現(xiàn)不能鏈接的狀況,屏幕顯示:</p><p> Linking... LINK : fatal error LNK1104: cannot o
101、pen file "D:\98DDK\lib\i386\free\hid.lib" Error executing link.exe.</p><p> 最后經過上網查找資料,找到了解決方法:打開VC,Tools--Options--Directories,在show directories for組合框中選擇library files,看看你的lib的路徑設置的對不對。如果不到,
102、雙擊其中的一項,將該路徑修改到你的指定目錄中即可。這樣就解決了上述問題。</p><p> 2.制作系統(tǒng)托盤程序圖標 </p><p> 在vc++編程中,在資源內插入icon,即我們要制作的系統(tǒng)托盤程序圖標:</p><p> (1)用vc++中的CimageList class 的 BOOL Create(int cx,int cy,BOOL bMask
103、,int nInitial,int nGrow); 初始化。 (2)用Windows的API函數(shù)LoadImage()裝載圖標資源; (3)用CImageList類的Add(HICON hIcon)函數(shù)加將裝載后的圖表添加到CImageList類對象中去; (4)調用CToolBarCtrl類的CImageList* SetImageList( CImageList* pImageList )函數(shù)將圖標列表對象與
104、工具條對象關聯(lián)起來,從而在工具條上顯示出裝載的圖標。</p><p> 這樣制作者就可以插入自己所需要的ICON,而可以不必使用系統(tǒng)自帶的圖標。</p><p><b> 3.制作自定義消息</b></p><p> 在制作自定義消息時必須要在CMainFrame類中添加自定義消息: #define WM_MY_TRAY_NOTIFIC
105、ATION WM_USER+0,這樣才能使自定義消息有效,之后必須手動添加消息映射,這樣才能使你的自定義消息有效,這兩點在實際編程中需要多注意,是很容易忽略的兩部分。</p><p> 4.3 程序運行調試結果</p><p> 在完成服務器軟件的編譯后,最后的工作就是調式系統(tǒng)和檢測軟件功能的實現(xiàn)。</p><p> 首先,編譯成功通過后,能正常運行軟件,服
106、務器各個選項的設置也能正常修改,并在服務器運行后,各個選項的修改能正確顯示出來。</p><p> 服務器運行后,能正常顯示用戶的訪問記錄,在主頁面上也能正確顯示服務器根目錄的所有文件,并提供用戶正常瀏覽和訪問。</p><p> 服務器運行后,可以實現(xiàn)局域網多用戶瀏覽,局域網的用戶可以通過輸出服務器運行計算機的名稱地址,就可訪問并瀏覽服務器內容,由于客觀環(huán)境因素限制,我只測試了4個用
107、戶同時訪問成功。</p><p> 本次設計的WEB服務器基本功能已經實現(xiàn),但只支持局域網內的用訪問和瀏覽,對于外網的連接請求并不支持,如果需要支持外網用戶訪問,就需要修改程序中的網絡通信部分程序,即SOCKET部分程序,如果時間允許或者以后再有機會接觸或實際操作,我會爭取做好這部分。</p><p><b> 第五章 總結</b></p><
108、;p> 5.1 設計內容總結</p><p> 本次設計就是完成一個簡易的WEB服務器的設計,實現(xiàn)web服務器基本功能:頁面訪問請求響應、HTML文件的解析以及數(shù)據(jù)發(fā)送。</p><p> 本次設計的Web服務器,除了完成網絡通信鏈路的建立和拆除,之外至少還要有二方面的功能:“分折請求” 和“構造響應”??蛻舳伺c服務器交換數(shù)據(jù)之前,首先用TCP/IP建立連接,客戶端向服務器請
109、求數(shù)據(jù),服務器則向客戶端響應并提供數(shù)據(jù)??蛻舳撕头掌饕訦TTP協(xié)議進行請求和響應。服務器和客戶端只能為一次事務處理建立并維持連接,完成一次事務處理后便結束連接。</p><p> 接收客戶端請求、解析客戶端請求、響應客戶端請求、向客戶端回送請求的結果是Web服務器所需完成的主要任務,Web服務器程序代碼主要是為了完成這幾項任務.</p><p> Web服務器通常由以下幾個部分組成,
110、也就是本次設計的主要內容:(1)服務器初始化部分.這部分主要完成Web服務器的初始化工作,如建立守護進程、創(chuàng)建TCP套接字、綁定端口、將TCP套接字轉換成偵聽套接字,進入循環(huán)結構,等待接收用戶瀏覽器連接.(2)接收客戶端請求.由于客戶端請求以文本行的方式實現(xiàn),所以服務器一般也以文本行為單位接收.(3)解析客戶端請求.這部分工作比較復雜,需要解析出請求的方法、URL目標、可選的查詢信息及表單信息.如果請求方法為HEAD,則簡單地返回響應首
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- web服務器設計畢業(yè)論文
- web服務器的構建畢業(yè)論文
- 基于java的web服務器畢業(yè)論文
- 嵌入式web服務器畢業(yè)論文
- 郵件服務器畢業(yè)論文
- 郵件服務器——畢業(yè)論文
- web服務器安全畢業(yè)設計
- 構建嵌入式linux web動態(tài)服務器畢業(yè)論文
- linux下http服務器設計畢業(yè)論文
- 畢業(yè)論文---linux下http服務器設計
- linux下http服務器設計-畢業(yè)論文
- arm平臺嵌入式web服務器的設計與實現(xiàn)-畢業(yè)論文
- 畢業(yè)論文基于snmp管理的web服務器的研究與實現(xiàn)
- 畢業(yè)論文----企業(yè)網絡建設(web郵件服務器訪問控制acl)
- arm平臺嵌入式web服務器的設計與實現(xiàn)-本科畢業(yè)論文
- 局域網服務器搭建 畢業(yè)論文
- 局域網服務器搭建 畢業(yè)論文
- 軟件1009班-靳建雄-2010004608-Web服務器畢業(yè)論文.doc
- 服務器性能監(jiān)控系統(tǒng)(本科畢業(yè)論文)
- WEB服務器加速系統(tǒng)設計.pdf
評論
0/150
提交評論