RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

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

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


网页名称:JavaSocket应答与HTTP服务器的瓜葛
浏览路径:http://aqpgk.com/article/djgeepj.html