偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

HTTP協(xié)議請(qǐng)求包的Java實(shí)現(xiàn)

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

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

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

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

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

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

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

backlog為連接請(qǐng)求的最大隊(duì)列長(zhǎng)度,一旦超越這個(gè)長(zhǎng)度,服務(wù)器端點(diǎn)開(kāi)始拒絕客戶端的連接請(qǐng)求。

bindingAddress是一個(gè)java.net.InetAddress的實(shí)例,指定綁定IP地址。

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

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

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

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

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

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

下面的代碼片斷創(chuàng)建一個(gè)與本地HTTP服務(wù)器(127.0.0.1代表本地主機(jī)的IP地址)通信的Socket,發(fā)送一個(gè)HTTP協(xié)議請(qǐng)求包,準(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ā)送一個(gè)HTTP請(qǐng)求包  
  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é)議請(qǐng)求包  
  19. // 創(chuàng)建HTTP請(qǐng)求包處理線程  
  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請(qǐng)求包,跟根據(jù)請(qǐng)求包內(nèi)容在服務(wù)端生成一個(gè)HTTP應(yīng)答包。下一節(jié)說(shuō)明怎樣分析HTTP包。

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

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

責(zé)任編輯:佟健 來(lái)源: 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請(qǐng)求協(xié)議

2019-04-08 15:11:12

HTTP協(xié)議Web

2011-08-17 10:16:35

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

2018-04-17 16:29:24

Java面試HTTP

2009-07-28 15:29:03

實(shí)現(xiàn)HTTP請(qǐng)求ASP.NET

2014-10-22 09:36:41

TCPIP

2019-08-01 15:25:17

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

2015-10-09 15:07:02

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

2021-03-05 11:20:24

HTTPWebshellWeb服務(wù)器

2017-05-26 10:35:13

前端HTTP

2018-10-18 10:05:43

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

2025-02-04 09:58:08

2020-09-24 09:43:59

Http協(xié)議options請(qǐng)求

2022-04-08 08:26:03

JavaHTTP請(qǐng)求

2023-07-28 14:32:33

QtPOST請(qǐng)求

2015-09-15 13:48:01

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

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