自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HTTP協(xié)議請求包的Java實現(xiàn)

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
下面我們對HTTP協(xié)議包的Java實現(xiàn)進行了說明。首先我們需要了解一下整個請求連接過程是怎樣的,之后,再對這個具體的代碼進行一下分析。

前面我們對GET方法實現(xiàn)HTTP協(xié)議包的過程進行了簡單的介紹,不知道大家是否已經(jīng)掌握了。那么現(xiàn)在,我們主要分析一下Java中,Socket類與ServerSocket類的協(xié)議包的鏈接發(fā)送與接收。

在Java中,通信端點由java.net.Socket類(客戶端)或java.net.ServerSocket類(服務(wù)器端)表示。應(yīng)用程序通過端點向網(wǎng)絡(luò)發(fā)送或從網(wǎng)絡(luò)讀取數(shù)據(jù)。位于兩臺不同機器上的應(yīng)用軟件通過網(wǎng)絡(luò)連接發(fā)送和接收字節(jié)流,從而實現(xiàn)通信。要把HTTP協(xié)議包發(fā)送給另一個應(yīng)用,首先要知道對方的IP地址以及其通信端點的端口號。Socket類代表的是客戶端,它是一個連接遠程服務(wù)器應(yīng)用時臨時創(chuàng)建的端點。

ServerSocker類代表的是服務(wù)器端,它啟動后等待來自客戶端的連接請求;一旦接收到請求,ServerSocket創(chuàng)建一個Socket實例來處理與該客戶端的通信。對于服務(wù)器應(yīng)用,我們不知道客戶端應(yīng)用什么時候會試圖連接服務(wù)器,服務(wù)器必須一直處于等待連接的狀態(tài)。

下面是ServerSocket提供了四個構(gòu)造函數(shù),常用的構(gòu)造函數(shù)的的一種形式為:

public ServerSocket(int port, int backLog, InetAddress bindingAddress);

參數(shù):port指定服務(wù)器端監(jiān)聽客戶端的端口;

backlog為連接請求的最大隊列長度,一旦超越這個長度,服務(wù)器端點開始拒絕客戶端的連接請求。

bindingAddress是一個java.net.InetAddress的實例,指定綁定IP地址。

創(chuàng)建好ServerSocket實例之后,調(diào)用它的accept方法,要求它等待傳入的連接請求。只有出現(xiàn)了連接請求時,accept方法才會返回,它的返回值是一個Socket類的實例。隨后,這個Socket對象就可以用來與客戶端應(yīng)用通信。

Socket類有許多構(gòu)造函數(shù),常用的為:

public Socket(String host, int port)。參數(shù)是主機名稱(IP地址或域名)和端口號。

參數(shù)host是遠程機器的名字或IP地址,port是遠程應(yīng)用的端口號。

成功創(chuàng)建了Socket類的實例之后,我們就可以用它來發(fā)送和接收字節(jié)流形式的數(shù)據(jù),數(shù)據(jù)一般為HTTP協(xié)議包。

要發(fā)送字節(jié)流,首先要調(diào)用Socket類的getOutputStream方法獲得一個java.io.OutputStream對象;要從連接的另一端接收字節(jié)流,首先要調(diào)用Socket類的getInputStream方法獲得一個java.io.InputStream對象。

下面的代碼片斷創(chuàng)建一個與本地HTTP服務(wù)器(127.0.0.1代表本地主機的IP地址)通信的Socket,發(fā)送一個HTTP協(xié)議請求包,準(zhǔn)備接收服務(wù)器的應(yīng)答。#p#

  1. Socket socket = new Socket("127.0.0.1", "80");  
  2. OutputStream ossocket.getOutputStream();  
  3. InputStreamins = socket.getInputStream();  
  4. StringBuffer sb=new StringBuffer();  
  5. sb.append("GET /index.jsp HTTP/1.1rn");//注意rn為回車換行  
  6. sb.append("Accept-Language: zh-cnrn");  
  7. sb.append("Connection: Keep-Alivern");  
  8. sb.append("Host: 192.168.0.106rn");  
  9. sb.append("Content-Length: 37rn");  
  10. sb.append("rn");  
  11. sb.append("userName=new_andy&password=new_andyrn");  
  12. sb.append("rn");  
  13. //向Web服務(wù)器發(fā)送一個HTTP請求包  
  14. os.write(sb.toString().getBytes());  
  15. 服務(wù)器端的代碼在大致結(jié)構(gòu)為:  
  16. while (!shutdown) {  
  17. Socket socket = null;  
  18. try {socket = serverSocket.accept(); //等待客戶以送HTTP協(xié)議請求包  
  19. // 創(chuàng)建HTTP請求包處理線程  
  20. RequestThread request = new RequestThread(socket);  
  21. request.start();  
  22. if(shutdown) System.exit(0);  
  23. }  
  24. catch (Exception e) {  
  25. e.printStackTrace();  
  26. } } 

RequestThread線程分析HTTP請求包,跟根據(jù)請求包內(nèi)容在服務(wù)端生成一個HTTP應(yīng)答包。下一節(jié)說明怎樣分析HTTP包。

InputStreaminput = socket.getInputStream();//從此字節(jié)數(shù)據(jù)流獲得HTTP請求包內(nèi)容。

OutputStream output= socket.getOutputStream(); //向此字節(jié)流寫入HTTP協(xié)議應(yīng)答包內(nèi)容。

責(zé)任編輯:佟健 來源: IT專家網(wǎng)
相關(guān)推薦

2010-06-29 13:18:31

HTTP協(xié)議

2010-06-29 13:35:39

HTTP協(xié)議

2020-06-17 21:39:11

HTTP協(xié)議服務(wù)器

2020-10-20 14:01:16

HTTP

2011-08-09 14:08:51

iPhoneHTTP請求協(xié)議

2019-04-08 15:11:12

HTTP協(xié)議Web

2011-08-17 10:16:35

iPhone應(yīng)用HTTP請求協(xié)議

2018-04-17 16:29:24

Java面試HTTP

2019-08-01 15:25:17

Http服務(wù)器協(xié)議

2009-07-28 15:29:03

實現(xiàn)HTTP請求ASP.NET

2014-10-22 09:36:41

TCPIP

2017-05-26 10:35:13

前端HTTP

2021-03-05 11:20:24

HTTPWebshellWeb服務(wù)器

2015-10-09 15:07:02

HTTP網(wǎng)絡(luò)協(xié)議

2023-07-28 14:32:33

QtPOST請求

2022-04-08 08:26:03

JavaHTTP請求

2020-09-24 09:43:59

Http協(xié)議options請求

2018-10-18 10:05:43

HTTP網(wǎng)絡(luò)協(xié)議TCP

2025-02-04 09:58:08

2015-09-15 13:48:01

網(wǎng)絡(luò)協(xié)議HTTP Client
點贊
收藏

51CTO技術(shù)棧公眾號