设为首页收藏本站language 语言切换
查看: 1306|回复: 0
收起左侧

Java网络编程从入门到精通 实现HTTP模拟器

[复制链接]
发表于 2010-2-20 14:56:19 | 显示全部楼层 |阅读模式
<p >在讨论HTTP协议的具体请求和响应头字段之前,让我们先来利用以前所学的知识来实现一个HTTP模拟器。所谓HTTP模拟器就是可以在用户输入HTTP的请求消息后,由这个模拟器将HTTP请求发送给相应的服务器,再接收服务器的响应消息。这个HTTP模拟器有几下特点:<p ><p >1、可以手工输入HTTP请求,并向服务器发送。<p >2、接收服务器的响应消息。<p >3、消息头和实体内容分段显示,也就是说,并不是象Telnet等客户端一样将HTTP响应消息全部显示,而是先显示消息头,然后由用户决定是否显示实体内容。<p >4、集中发送请求。这个HTTP模拟器和Telnet不同的是,并不是一开始就连接服务器,而是将域名、端口以及HTTP请求消息都输完后,才连接服务器,并将这些请求发送给服务器。这样做的可以预防服务器提前关闭网络连接的现象。<p >5、可以循环做上述的操作。<p ><p >从以上的描述看,要实现这个HTTP模拟器需要以下五步:<p ><p >1、建立一个大循环,在循环内部是一个请求/响应对。这样就可以向服务器发送多次请求/响应以了。下面的四步都是被包括在循环内部的。<p >2、从控制台读取域名和端口,这个功能可以由readHostAndPort(...)来完成。<p >3、从控制台读取HTTP请求消息,这个功能由readHttpRequest(...)来完成。<p >4、向服务器发送HTTP请求消息,这个功能由sendHttpRequest()来完成。<p >5、读取服务器回送的HTTP响应消息,这个功能由readHttpResponse(...)来完成。<p ><p >下面我们就来逐步实现这五步:<p ><p >一、建立一个大循环<p ><p >在建立这个循环之前,先建立一个中叫HttpSimulator的类,并在这个类中定义一个run方法用来运行这个程序。实现代码如下:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>001  package http;  002    003  import java.net.*;  004  import java.io.*;  005    006  public class HttpSimulator  007  {  008      private Socket socket;  009      private int port = 80;  010      private String host = &quot;localhost&quot;;  011      private String request = &quot;&quot;; // HTTP请求消息  012      private boolean isPost, isHead;  013         014      public void run() throws Exception  015      {  016          BufferedReader reader = new BufferedReader(new InputStreamReader(  017                  System.in));  018          while (true)  // 开始大循环  019          {  020              try  021              {  022                  if (!readHostAndPort(reader))  023                      break;  024                  readHttpRequest(reader);  025                  sendHttpRequest();  026                  readHttpResponse(reader);  027              }  028              catch (Exception e)  029              {  030                  System.out.println(&quot;err:&quot; + e.getMessage());  031              }  032          }  033      }  034      public static void main(String[] args) throws Exception  035      {  036          new HttpSimulator().run();  037      }  038  }</ccid_code></pre></td></tr></table></ccid_nobr><br><p ><p >从上面的代码可以看出,第022、024、025和026分别调用了上述的四个方法。这些方法的具体实现将在后面讨论。上面的代码除了调用这四个核心方法外,还做了一些准备工作。在008至012行定义了一些以后要用到的变量。在016和017行使用控制台的输入流建立了BufferedReader对象,通过这个对象,可以直接从控制台读取字符串,而不是一个个地字节。                                 <p align="center"><font color="FF0000" >1</font>234<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-9 00:06 , Processed in 0.102408 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表