计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc
云南大學軟件學計算機網絡原理實驗四
實驗四、web服務器套接字編程實驗指導
1.實驗目的:
編寫一個WEB服務器程序,可以接受來自瀏覽器的訪問,并傳輸頁面(包含多個對象)到瀏覽器。掌握Socket編程。
2.實驗環境:
連入局域網絡的主機一臺。
3.實驗指導:
超文本傳輸協議(HTTP)是位于TCP/IP 協議的應用層,是最廣為人知的協議,也是互連網中最核心的協議之一。HTTP協議是Web瀏覽器和Web服務器之間的應用層協議,是通用的、無狀態的、面向對象的協議。
一個完整的HTTP協議會話過程包括四個步驟:
連接
Web瀏覽器與Web服務器建立連接,打開一個稱為Socket(套接字)的虛擬文件,此文件的建立標志著連接建立成功;
請求
Web瀏覽器通過Socket向Web服務器提交請求。HTTP的請求一般是GET或POST命令(POST用于FORM參數的傳遞);
應答
Web瀏覽器提交請求后,通過HTTP協議傳送給Web服務器。Web服務器接到后,進行事務處理,處理結果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面;
關閉連接
應答結束后Web瀏覽器與Web服務器必須斷開,以保證其它Web瀏覽器能夠與Web服務器建立連接。
4.實驗分析,回答下列問題。
運行課本中Webserver.java程序。查找資料,寫出程序源代碼,并加上必要的注釋。如能改寫該程序,附上修改后的源代碼。附上運行的截圖。
代碼及注釋如下:
import?java.io.*;//引入Java輸入輸出包 import?.*; //引入Java網絡包 import?java.util.*;//導入Java實用工具庫 class?Webserver{public?static?void?main(String?arg[])?throws?Exception{String?requestMessageLine;String?filename;
//創建一個監聽socket ServerSocket?listenSocket=new?ServerSocket(6789);
//等待客戶機發起連接 while(1==1){Socket?connectionSocket=listenSocket.accept();
//創建一個從socket中讀文本行的流 BufferedReader?inFromClient=new?
BufferedReader(new?InputStreamReader(connectionSocket.getInputStream()));
//創建一個向socket中寫文本行的流 DataOutputStream?outToClient=new?
DataOutputStream(connectionSocket.getOutputStream());
//讀取客戶機發送的一行文本requestMessageLine=inFromClient.readLine();
//字段串解析 StringTokenizer?tokenizerLine=new?StringTokenizer(requestMessageLine);
//如果客戶端的請求方式為get方式
if(tokenizerLine.nextToken().equals("GET")){
filename=tokenizerLine.nextToken();
//獲得文件名
if(filename.startsWith("/")==true)
filename=filename.substring(1);
//新建文件
System.out.println("The request filename is:" + filename);
//輸出字符串,內容為客戶端請求的文件名
File file=new File(filename);
int numOfBytes=(int)file.length();
//新建文件輸入流
FileInputStream inFile=new FileInputStream(filename);
byte[] fileInBytes=new byte[numOfBytes];
//將文件流信息讀入byte數組
inFile.read(fileInBytes);
// 服務端輸出信息
outToClient.writeBytes("HTTP/1.0 200 Document Follows\r\n");
//不同的文件類型所對應的頭文件格式不同
if(filename.endsWith(".jpg"))
outToClient.writeBytes
總結
以上是生活随笔為你收集整理的计算机网络云南大学实验四,云南大学软件学计算机网络原理实验四.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实例 83,84
- 下一篇: 堆排序java实例_堆排序(示例代码)