資源描述:
《多線程web-server設(shè)計與實(shí)現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、多線程WebServer的設(shè)計與實(shí)現(xiàn)班級:研1428班學(xué)號:2141221064姓名:王嬌一、概述如今,上網(wǎng)已成為最熱門話題,通過Internet,我們既能獲取信息又能發(fā)布信息,而迅速發(fā)展的Web技術(shù)更是給Internet應(yīng)用提供了一個很好的發(fā)展方向。當(dāng)今的許多應(yīng)用都是基于web技術(shù)的,如電子商務(wù)、視頻會議、遠(yuǎn)程醫(yī)療診斷等。由于HTML語言的標(biāo)準(zhǔn)統(tǒng)一性,只要在設(shè)備里建立一個微型web服務(wù)器,人們就可以使用現(xiàn)有的Web瀏覽器與該設(shè)備進(jìn)行雙向交互、接收或發(fā)送信息。因此,針對微型web服務(wù)器的研究和應(yīng)用,具有重大的意義,它為我們管理、控制和監(jiān)測各種各樣的設(shè)備提供了一個很好的
2、途徑一基于Internet,也就是說,只要設(shè)備接入了Internet,我們就可以在世界上的任何地方十分方便地控制、操縱那些配備有微型Web服務(wù)器的設(shè)備。二、設(shè)計內(nèi)容1)熟悉WWW服務(wù)器和WEB服務(wù)器的工作原理;2)熟悉套接字編程的相關(guān)知識;3)完成一個簡單的WEB服務(wù)器的設(shè)計與實(shí)現(xiàn),要求能夠通過HTTPGET命令獲得一個簡單的HTML文件;4)運(yùn)行該服務(wù)器,并編寫一個簡單的HTML文件完成測試。三、實(shí)驗原理HTTP協(xié)議的作用原理包括四個步驟:1)連接:Web瀏覽器與Web服務(wù)器建立連接,打開一個稱為socket(套接字)的虛擬文件,此文件的建立標(biāo)志著連接建立成功。2)
3、請求:Web瀏覽器通過socket向Web服務(wù)器提交請求。HTTP的請求一般是GET或POST命令(POST用于FORM參數(shù)的傳遞)。GET命令的格式為:GET路徑/文件名HTTP/1.0文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。3)應(yīng)答:Web瀏覽器提交請求后,通過HTTP協(xié)議傳送給Web服務(wù)器。Web服務(wù)器接到后,進(jìn)行事務(wù)處理,處理結(jié)果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。三、實(shí)驗方法Java實(shí)現(xiàn)Web服務(wù)器功能的程序設(shè)計根據(jù)上述HTTP協(xié)議的作用原理,實(shí)現(xiàn)GET請求的Web服務(wù)器程序的方法如下
4、:101)創(chuàng)建ServerSocket類對象,監(jiān)聽端口8080。2)等待、接受客戶機(jī)連接到端口8080,得到與客戶機(jī)連接的socket;3)創(chuàng)建與socket字相關(guān)聯(lián)的輸入流instream和輸出流outstream;4)從與socket關(guān)聯(lián)的輸入流instream中讀取一行客戶機(jī)提交的請求信息,請求信息的格式為:GET路徑/文件名HTTP/1.05)從請求信息中獲取請求類型。如果請求類型是GET,則從請求信息中獲取所訪問的HTML文件名。沒有HTML文件名時,則以index.html作為文件名;6)如果HTML文件存在,則打開HTML文件,把HTTP頭信息和HTML
5、文件內(nèi)容通過socket傳回給Web瀏覽器,然后關(guān)閉文件。否則發(fā)送錯誤信息給Web瀏覽器;7)關(guān)閉與相應(yīng)Web瀏瀏覽器連接的socket字。四、實(shí)驗過程1.首先打開開發(fā)工具M(jìn)yEclipse8.5MyEclipse8.5是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。向MyEclipse8.5中輸入如下Web服務(wù)器程序源碼:importjava.io.*;importjava.net.*;publicclassWebServer{publicstaticvoidmain(Stringargs[])
6、{inti=1,PORT=8080;ServerSocketserver=null;Socketclient=null;try{server=newServerSocket(PORT);system.out.println("WebServerislisteningonport"+server.getLocalPort());for(;;){client=server.accept();//接受客戶機(jī)的連接請求newConnectionThread(client,i).start();i++;10}}catch(Exceptione){System.out.print
7、ln(e);}}}/*ConnnectionThread類完成與一個Web瀏覽器的通信*/classConnectionThreadextendsThread{Socketclient;//連接Web瀏覽器的socket字intcounter;//計數(shù)器publicConnectionThread(Socketcl,intc){client=cl;ounter=c;}publicvoidrun()//線程體{try{StringdestIP=client.getInetAddress().toString();//客戶機(jī)IP地址intdestport