国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

HTTP協議包讀取過程的Java實現

網絡 網絡管理
首先我們在了解了前文的基礎后,再來對讀取HTTP協議包的代碼進行一下講解。那么這部分內容的代碼比較多,希望能夠幫助大家了解這部分內容。

之前的兩篇文章中《GET實現HTTP協議請求包的分析》和《HTTP協議請求包的Java實現》對HTTP協議包的請求連接內容進行了不少的講解。那么本文將繼續做一下補充,主要是講解如何完成讀取HTTP包。

以下我自己設計的一個讀取HTTP協議包的類SocketRequest。

  1. public class SocketRequest   
  2. {//從指定的Socket的InputStream中讀取數據  
  3. private InputStreaminput;  
  4. private Stringuri;  
  5. private StringBufferrequest=new StringBuffer();//用于保存所有內容  
  6. private intCONTENT_LENGTH=0;//實際包內容數據長  
  7. private boolean bePost = false;  
  8. private boolean beHttpResponse = false;  
  9. private boolean beChucked = false;  
  10. private boolean beGet = false;  
  11. private bytecrlf13 = (byte)13; //'r'  
  12. private bytecrlf10 = (byte)10;//'n'  
  13. public SocketRequest(InputStream input) {  
  14. this.input = input;}  
  15. public SocketRequest(Socket socket) {  
  16. this.input = socket.getInputStream();}  
  17. public void ReadData()   
  18. {//解析 獲得InputStream的數據   
  19. ReadHeader();//頭部  
  20. if(beChucked) //為Chucked  
  21. {int ChuckSize=0;  
  22. while((ChuckSize=getChuckSize())>0) //多個Chucked  
  23. {readLenData(ChuckSize+2);//讀取定長數據}  
  24. readLenData(2); //最后的2位}  
  25. if(CONTENT_LENGTH>0)  
  26. {readLenData(CONTENT_LENGTH);//讀取定長數據}  
  27. uri = "";//parseUri(new String(request));}  
  28. private void readLenData(int size)//讀取定長數據  
  29. {int readed=0;//已經讀取數  
  30. try{  
  31. int available=0;//input.available(); //可讀數  
  32. if(available>(size-readed)) available=size-readed;  
  33. while( readed<size )  
  34. {while(available==0){//等到有數據可讀  
  35. available = input.available(); //可讀數}  
  36. if(available>(size-readed)) available= size-readed; //size-readed--剩余數  
  37. if(available>2048) available= 2048; //size-readed--剩余數  
  38. byte[] buffer = new byte[available];  
  39. int reading = input.read(buffer);  
  40. request=request.append(new String(buffer,0,reading));//byte數組相加  
  41. readed+=reading;//已讀字符  
  42. }}catch(IOException e){System.out.println("Read readLenData Error!");} }   
  43. private voidReadHeader() //讀取頭部 并獲得大小  
  44. {byte[]crlf= new byte[1];  
  45. intcrlfNum= 0;//已經連接的回車換行數 crlfNum=4為頭部結束  
  46. try{while( input.read(crlf)!=-1 )//讀取頭部  
  47. {if(crlf[0]==crlf13 || crlf[0]==crlf10)  
  48. {crlfNum++; }  
  49. else 
  50. {crlfNum=0;} //不是則清  
  51. request=request.append(new String(crlf,0,1));//byte數組相加  
  52. if(crlfNum==4) break;}}  
  53. catch(IOException e){System.out.println("Read Http Header Error!");  
  54. return;}  
  55. String tempStr=(new String(request)).toUpperCase();//這里我只處理了GET與POST方法  
  56. StringstrMethod= tempStr.substring(0,4);  
  57. if(strMethod.equals("GET ")) //前  
  58. {beGet=true;}  
  59. else if(strMethod.equals("POST"))  
  60. {bePost=true;  
  61. getContentlen_Chucked(tempStr);}  
  62. else {System.out.println("不支持的HTTP協議包類型");}//其它的其它類型 暫不支持  
  63. }  
  64. private void getContentlen_Chucked(String tempStr)//獲得長度 CONTENT-LENGTH 或 是否為CHUNKED型  
  65. {String ss1="CONTENT-LENGTH:";  
  66. String ss2=new String("TRANSFER-ENCODING: CHUNKED");  
  67. int clIndex= tempStr.indexOf(ss1);  
  68. int chuckIndex = tempStr.indexOf(ss2);//為CHUNKED型  
  69. byte requst[]= tempStr.getBytes();  
  70. if(clIndex!=-1)  
  71. //從clIndex+1起至rn  
  72. StringBuffer sb=new StringBuffer();  
  73. for(int i=(clIndex+16);;i++)  
  74. {if(requst[i]!=(byte)13 && requst[i]!=(byte)10 )  
  75. {sb.append((char)requst[i]);}  
  76. else   
  77. break;}  
  78. CONTENT_LENGTH=Integer.parseInt(sb.toString());//正式的HTML文件的大小  
  79. //System.out.println("CONTENT_LENGTH=="+CONTENT_LENGTH);}  
  80. if(chuckIndex!=-1) beChucked=true;}  
  81. private intgetChuckSize() //Chuck大小{  
  82. byte[]crlf= new byte[1];  
  83. StringBuffersb1= new StringBuffer();  
  84. intcrlfNum= 0;//已經連接的回車換行數 crlfNum=4為頭部結束  
  85. try{while(input.read(crlf)!=-1)//讀取頭部{  
  86. if(crlf[0]==crlf13 || crlf[0]==crlf10)  
  87. {crlfNum++; }  
  88. else 
  89. {crlfNum=0;} //不是則清  
  90. sb1.append((char)crlf[0]);  
  91. request=request.append(new String(crlf,0,1));//byte數組相加  
  92. if(crlfNum==2) break;}  
  93. }catch(IOException e){  
  94. System.out.println("Read Http Package Error!");  
  95. return 0;}  
  96. return Integer.parseInt((sb1.toString()).trim(),16); //16進控制  
  97. }//通過此來進行過濾,是否為發至目標服務器的HTTP協議包  
  98. private String parseUri(String requestString) {   
  99. int index1, index2;  
  100. index1 = requestString.indexOf(' ');  
  101. if (index1 != -1) {  
  102. index2 = requestString.indexOf(' ', index1 + 1);  
  103. if (index2 > index1)  
  104. return requestString.substring(index1 + 1, index2);}  
  105. return null;}  
  106. public String getData() {  
  107. return request.toString();}} 

使用此類:

  1. SocketRequest request = new SocketRequest(socket); //socket為ServerSocket.accept()返回的Socket實例  
  2. request.ReadData();//讀取數據  
  3. request.getData(); 

為什么我要用這么大的力量去讀取呢,尤其是在因為Socket連接在發送數據時,由于網絡的原因經常會發生延遲現象,可能在服務器端開始接收數據時可能只有部分數據可以從InputStream中獲得,在一些地方處理不當時,可能只能獲得不完整的數據或是錯誤的數據。

從InputStream讀取字節時有多種辦法:

常用int read()與int read(byte[] b)。在用read(byte[])時,程序員經常會犯錯誤,因為在網絡環境中,讀取的數據量不一定等于參數的大小。

責任編輯:佟健 來源: 網界網
相關推薦

2010-06-29 13:24:26

HTTP協議

2010-06-29 13:18:31

HTTP協議

2020-06-17 21:39:11

HTTP協議服務器

2019-04-08 15:11:12

HTTP協議Web

2010-06-24 13:18:38

ICMP協議

2018-04-17 16:29:24

Java面試HTTP

2014-10-22 09:36:41

TCPIP

2019-08-01 15:25:17

Http服務器協議

2015-10-09 15:07:02

HTTP網絡協議

2021-03-05 11:20:24

HTTPWebshellWeb服務器

2017-05-26 10:35:13

前端HTTP

2018-10-18 10:05:43

HTTP網絡協議TCP

2015-09-15 13:48:01

網絡協議HTTP Client

2010-09-09 13:09:33

協議棧開發

2010-06-23 14:27:04

Fix協議

2010-06-08 12:31:15

HTTP協議實體

2010-07-01 16:01:05

HTTP協議

2022-03-09 18:54:30

HTTP緩存協議cache

2011-09-06 09:48:41

MTK平臺

2019-08-23 06:36:32

點贊
收藏

51CTO技術棧公眾號

91福利在线观看| 亚洲欧洲日韩综合二区| 日韩视频免费大全中文字幕| 国产精品一区二区三区在线| freexxx性亚洲精品| 国产无一区二区| 欧美连裤袜在线视频| 欧美韩国日本在线| 国产一区二区三区四区老人| 91gao视频| 国产精品一二| 国产免费黄色一级片| 一区二区三区中文在线观看| 一级毛片国产| 欧美精品在线一区二区三区| 波多野结衣久久| 97高清免费视频| 亚洲精品aaaaa| 琪琪第一精品导航| 狠狠久久伊人| 亚洲精品一区二区网址| 欧美日韩亚洲国产| 久久久久久久999| 波多野结衣在线一区二区| 日日骚av一区| 精品国产一区探花在线观看| 奇米成人av国产一区二区三区| 久久影院一区二区三区| 亚洲影院久久精品| 欧美xxxxx在线视频| 久久亚洲一区| 色姑娘综合网| 这里只有视频精品| 欧美视频官网| 精品国产_亚洲人成在线| 伊人久久大香线蕉av一区| 2021中文字幕在线| 日韩一区二区高清| 巨大黑人极品videos精品| 亚洲国产精品999| 在线观看日产精品| 久久精品男人天堂av| 欧美日韩一区二区三区在线视频| 欧美日韩精品一本二本三本| 成人久久18免费网站图片| 欧美 日韩 国产一区二区在线视频 | 99中文视频在线| 国产精品普通话对白| 欧美视频在线第一页| 国产欧美综合色| 韩国三级在线观看久| 欧美一区二区精品久久911| 国产经典一区| 国产日韩精品电影| 国产精品夜夜夜| www国产黄色| 欧美性极品xxxx娇小| 成人免费直播| 国产在线a不卡| 99久久精品国产一区二区三区| 探花国产精品| 亚洲码在线观看| 欧美精选一区二区三区| 成人在线免费观看视频网站| 亚洲欧美日韩精品久久久久| 黑人极品ⅴideos精品欧美棵| 久热精品在线视频| 青草av.久久免费一区| 嫩草影院网站在线| 日韩有码视频在线| 欧美日韩亚洲一区| 国内自拍视频一区| 亚洲国产成人精品电影| 希岛爱理一区二区三区| 亚洲中文字幕久久精品无码喷水| 欧美一区二区性放荡片| 久久不见久久见中文字幕免费| 亚洲日本无吗高清不卡| 亚洲国产乱码最新视频| 免费看久久久| 日本黄色三级大片| 亚洲男人天堂2023| 日韩午夜激情| 免费黄色在线视频网站| 成人激情视频在线播放| 亚洲自拍欧美精品| 91视频综合| 午夜电影福利| 国产97人人超碰caoprom| 欧美国产精品中文字幕| 影音先锋欧美激情| mm131国产精品| 国产精品91在线观看| 久久蜜桃av一区精品变态类天堂| www.久久99| 日av中文字幕| 欧美精品激情在线观看| 国产精品女同一区二区三区| 亚洲伊人伊色伊影伊综合网| 欧美精品色综合| 欧洲杯什么时候开赛| 成人精品视频一区二区| 中文字幕日本精品| 成人精品视频.| 另类中文字幕国产精品| 久久免费视频2| 日韩亚洲综合在线| 久久久久久久久伊人| 亚洲精品成人一区| 欧美成人三级在线播放| 国产精品久久久久久久久久久新郎 | 久久久无码精品亚洲日韩按摩| 九九热这里有精品| 成人免费淫片95视频观看网站| 91精品国产精品| 亚洲va欧美va人人爽午夜| 精品一区二区三区的国产在线观看| 在线观看麻豆蜜桃| 玖玖精品在线视频| 欧美极品在线播放| 在线播放亚洲一区| 亚洲精品欧美专区| 免费在线一区观看| 欧美日韩导航| 成人免费高清在线播放| 成人午夜免费在线视频| 欧美一级大片在线观看| 日韩欧美一区二区免费| 2欧美一区二区三区在线观看视频| 欧美视频免费| 中文字幕在线观看播放| 色婷婷综合缴情免费观看| 黄色一级大片在线观看| 97国产在线播放| 青青草成人免费在线视频| 自拍偷拍视频在线| 日本一区二区在线| 国产日韩欧美中文在线播放| 欧美在线观看日本一区| 性欧美暴力猛交69hd| 色老头一区二区三区| 亚洲一级黄色片| 色婷婷av一区二区三区在线观看 | 欧美巨乳在线| 中文字幕在线视频观看| 久久白虎精品| 在线观看中文字幕| 黄色片在线免费看| 羞羞视频在线观看不卡| 欧美videosex性欧美黑吊| 日本性爱视频在线观看| 精品欧美一区二区三区在线观看 | 国产一区二区三区精品视频| 欧一区二区三区| 天堂а在线中文在线无限看推荐| 免费无码av片在线观看| 久久网福利资源网站| 欧美精品一线| 国产在线观看免费网站| 国产中文字幕乱人伦在线观看| 91在线观看免费高清完整版在线观看 | 欧美性xxxx极品高清hd直播| 国产女同性恋一区二区| 国产亚洲精久久久久久| 亚洲成人免费观看| 欧美mv和日韩mv的网站| 久久久久久亚洲精品| 噜噜噜91成人网| thepron国产精品| 在线亚洲高清视频| xxxxxxxxx欧美| 99国产高清| 瑜伽美女视频| 国内精品伊人| 在线观看一区| 欧美日韩国产另类不卡| 国产精品电影在线观看| 超清福利视频| 国产精品主播在线观看| 26uuu国产电影一区二区| 555www色欧美视频| 欧美精品激情视频| 国产chinese精品一区二区| 欧美又粗又长又爽做受| 国产黄色片免费在线观看| 视频一区亚洲| 丁香花在线观看完整版电影| 国产福利在线播放麻豆| 青青热久免费精品视频在线18| 久久久久九九精品影院| 欧美hentaied在线观看| 一区二区日韩免费看| 国产精品一级在线| 成人精品小蝌蚪| 欧美日韩精品一区二区| 日韩jizzz| 国产精品一区二区美女视频免费看| 五月久久久综合一区二区小说| 天天色综合色| 亚洲精品少妇|