JavaSocket应答与HTTP服务器的瓜葛

Java Socket应答一直伴随着我们的编程生活,在不断的发展中有很多知识需要我们学习。下面我们就先来看看有关Java Socket应答的代码,有点长,但是看下去就会让你豁然开朗。

公司主营业务:网站建设、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出吴堡免费做网站回馈大家。

HTTP/1.1表示这个HTTP服务器是1.1版,200是服务器对客户请求的应答状态码,OK是对应答状态码的解释,之后是这个文档的元信息和文档正文。(相关应答状态码和元信息的解释请参阅Inetrnet标准草案:RFC2616)。

 
 
 
  1. Http.java 
  2. import java.net.*; 
  3. import java.io.*; 
  4. import java.util.Properties; 
  5. import java.util.Enumeration; 
  6. public class Http { 
  7. protected Socket client; 
  8. protected BufferedOutputStream sender; 
  9. protected BufferedInputStream receiver; 
  10. protected ByteArrayInputStream byteStream; 
  11. protected URL target; 
  12. private int responseCode=-1; 
  13. private String responseMessage=""; 
  14. private String serverVersion=""; 
  15. private Properties header = new Properties(); 
  16. public Http() { } 
  17. public Http(String url) { 
  18. GET(url) ; 
  19. /* GET方法根据URL,会请求文件、数据库查询结果、程序运行结果等多种内容 */ 
  20. public void GET(String url) { 
  21. try { 
  22. checkHTTP(url); 
  23. openServer(target.getHost(),target.getPort() ); 
  24. String cmd = "GET "+ getURLFormat(target) +" HTTP/1.0\r\n" 
  25. + getBaseHeads()+"\r\n"; 
  26. sendMessage(cmd); 
  27. receiveMessage(); 
  28. } catch(ProtocolException p) { 
  29. p.printStackTrace(); 
  30. return; 
  31. } catch(UnknownHostException e) { 
  32. e.printStackTrace(); 
  33. return; 
  34. } catch(IOException i) { 
  35. i.printStackTrace(); 
  36. return; 
  37. /* 
  38. * HEAD方法只请求URL的元信息,不包括URL本身。若怀疑本机和服务器上的 
  39. * 文件相同,用这个方法检查最快捷有效。 
  40. */ 
  41. public void HEAD(String url) { 
  42. try { 
  43. checkHTTP(url); 
  44. openServer(target.getHost(),target.getPort() ); 
  45. String cmd = "HEAD "+getURLFormat(target)+" HTTP/1.0\r\n" 
  46. +getBaseHeads()+"\r\n"; 
  47. sendMessage(cmd); 
  48. receiveMessage(); 
  49. }catch(ProtocolException p) { 
  50. p.printStackTrace(); 
  51. return; 
  52. }catch(UnknownHostException e) { 
  53. e.printStackTrace(); 
  54. return; 
  55. }catch(IOException i) { 
  56. i.printStackTrace(); 
  57. return; 
  58. /* 
  59. * POST方法是向服务器传送数据,以便服务器做出相应的处理。例如网页上常用的 
  60. * 提交表格。 
  61. */ 
  62. public void POST(String url,String content) { 
  63. try { 
  64. checkHTTP(url); 
  65. openServer(target.getHost(),target.getPort() ); 
  66. String cmd = "POST "+ getURLFormat(target) +"HTTP/1.0\r\n"+getBaseHeads(); 
  67. cmd += "Content-type: application/x-www-form-urlencoded\r\n"; 
  68. cmd += "Content-length: " + content.length() + "\r\n\r\n"; 
  69. cmd += content+"\r\n"; 
  70. sendMessage(cmd); 
  71. receiveMessage(); 
  72. }catch(ProtocolException p) { 
  73. p.printStackTrace(); 
  74. return; 
  75. }catch(UnknownHostException e) { 
  76. e.printStackTrace(); 
  77. return; 
  78. }catch(IOException i) { 
  79. i.printStackTrace(); 
  80. return; 
  81. protected void checkHTTP(String url) throws ProtocolException { 
  82. try { 
  83. URL target = new URL(url); 
  84. if(target==null || !target.getProtocol().toUpperCase().equals("HTTP") ) 
  85. throw new ProtocolException("这不是HTTP协议"); 
  86. this.target = target; 
  87. } catch(MalformedURLException m) { 
  88. throw new ProtocolException("协议格式错误"); 
  89. /* 
  90. * 与Web服务器连接。若找不到Web服务器,InetAddress会引发UnknownHostException 
  91. * 异常。若Socket连接失败,会引发IOException异常。 
  92. */ 
  93. protected void openServer(String host,int port) throws 
  94. UnknownHostException,IOException { 
  95. header.clear(); 
  96. responseMessage=""; responseCode=-1; 
  97. try { 
  98. if(client!=null) closeServer(); 
  99. if(byteStream != null) { 
  100. byteStream.close(); byteStream=null; 
  101. InetAddress address = InetAddress.getByName(host); 
  102. client = new Socket(address,port==-1?80:port); 
  103. sender = new BufferedOutputStream(client.getOutputStream()); 
  104. receiver = new BufferedInputStream(client.getInputStream()); 
  105. }catch(UnknownHostException u) { 
  106. throw u; 
  107. }catch(IOException i) { 
  108. throw i; 
  109. /* 关闭与Web服务器的连接 */ 
  110. protected void closeServer() throws IOException { 
  111. if(client==null) return; 
  112. try { 
  113. client.close(); sender.close(); receiver.close(); 
  114. } catch(IOException i) { 
  115. throw i; 
  116. client=null; sender=null; receiver=null; 
  117. protected String getURLFormat(URL target) { 
  118. String spec = "http:// 
  119. +target.getHost(); 
  120. if(target.getPort()!=-1) 
  121. spec+=":"+target.getPort(); 
  122. return spec+=target.getFile(); 
  123. /* 向Web服务器传送数据 */ 
  124. protected void sendMessage(String data) throws IOException{ 
  125. sender.write(data.getBytes(),0,data.length()); 
  126. sender.flush(); 
  127. /* 接收来自Web服务器的数据 */ 
  128. protected void receiveMessage() throws IOException{ 
  129. byte data[] = new byte[1024]; 
  130. int count=0; 
  131. int word=-1; 
  132. // 解析***行 
  133. while( (word=receiver.read())!=-1 ) { 
  134. if(word=='\r'||word=='\n') { 
  135. word=receiver.read(); 
  136. if(word=='\n') word=receiver.read(); 
  137. break; 
  138. if(count == data.length) data = addCapacity(data); 
  139. data[count++]=(byte)word; 
  140. String message = new String(data,0,count); 
  141. int mark = message.indexOf(32); 
  142. serverVersion = message.substring(0,mark); 
  143. while( mark
  144. responseCode = Integer.parseInt(message.substring(mark+1,mark+=4)); 
  145. responseMessage = message.substring(mark,message.length()).trim(); 
  146. // 应答状态码和处理请读者添加 
  147. switch(responseCode) { 
  148. case 400: 
  149. throw new IOException("错误请求"); 
  150. case 404: 
  151. throw new FileNotFoundException( getURLFormat(target) ); 
  152. case 503: 
  153. throw new IOException("服务器不可用" ); 
  154. if(word==-1) throw new ProtocolException("信息接收异常终止"); 
  155. int symbol=-1; 
  156. count=0; 
  157. // 解析元信息 
  158. while( word!='\r' && word!='\n' && word>-1) { 
  159. if(word=='\t') word=32; 
  160. if(count==data.length) data = addCapacity(data); 
  161. data[count++] = (byte)word; 
  162. parseLine: { 
  163. while( (symbol=receiver.read()) >-1 ) { 
  164. switch(symbol) { 
  165. case '\t': 
  166. symbol=32; break; 
  167. case '\r': 
  168. case '\n': 
  169. word = receiver.read(); 
  170. if( symbol=='\r' && word=='\n') { 
  171. word=receiver.read(); 
  172. if(word=='\r') word=receiver.read(); 
  173. if( word=='\r' || word=='\n' || word>32) break parseLine; 
  174. symbol=32; break; 
  175. if(count==data.length) data = addCapacity(data); 
  176. data[count++] = (byte)symbol; 
  177. word=-1; 
  178. message = new String(data,0,count); 
  179. mark = message.indexOf(':'); 
  180. String key = null; 
  181. if(mark>0) key = message.substring(0,mark); 
  182. mark++; 
  183. while( mark
  184. String value = message.substring(mark,message.length() ); 
  185. header.put(key,value); 
  186. count=0; 
  187. // 获得正文数据 
  188. while( (word=receiver.read())!=-1) { 
  189. if(count == data.length) data = addCapacity(data); 
  190. data[count++] = (byte)word; 
  191. if(count>0) byteStream = new ByteArrayInputStream(data,0,count); 
  192. data=null; 
  193. closeServer(); 
  194. public String getResponseMessage() { 
  195. return responseMessage; 
  196. public int getResponseCode() { 
  197. return responseCode; 
  198. public String getServerVersion() { 
  199. return serverVersion; 
  200. public InputStream getInputStream() { 
  201. return byteStream; 
  202. public synchronized String getHeaderKey(int i) { 
  203. if(i>=header.size()) return null; 
  204. Enumeration enum = header.propertyNames(); 
  205. String key = null; 
  206. for(int j=0; j<=i; j++) 
  207. key = (String)enum.nextElement(); 
  208. return key; 
  209. public synchronized String getHeaderValue(int i) { 
  210. if(i>=header.size()) return null; 
  211. return header.getProperty(getHeaderKey(i)); 
  212. public synchronized String getHeaderValue(String key) { 
  213. return header.getProperty(key); 
  214. protected String getBaseHeads() { 
  215. String inf = "User-Agent: myselfHttp/1.0\r\n"+ 
  216. "Accept: www/source; text/html; image/gif; */*\r\n"; 
  217. return inf; 
  218. private byte[] addCapacity(byte rece[]){ 
  219. byte temp[] = new byte[rece.length+1024]; 
  220. System.arraycopy(rece,0,temp,0,rece.length); 
  221. return temp; 
  222. public static void main(String[] args) { 
  223. Http http=new Http(); 
  224. //http.GET("http://192.168.1.5 
  225. ); 
  226. int i; 
  227. for (i=0; i<50000; i++) { 
  228. http.GET("http://www.model-dl.com/modelinfo.asp?modelid=101 ); 
  229. http.POST("http://www.model-dl.com/modelinfo.asp?modelid=101,"ratecontd=101&MM_insert=form1 "); 
  230. }

以上就是对Java Socket应答的相关介绍,希望大家有所发现。

网页名称:JavaSocket应答与HTTP服务器的瓜葛
网站路径:http://www.csdahua.cn/qtweb/news28/269028.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网