当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>JAVA网络编程

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

    专题推荐:网络编程-基础到进阶教程

    在讨论HTTP协议的具体请求和响应头字段之前,让我们先来利用以前所学的知识来实现一个HTTP模拟器。所谓HTTP模拟器就是可以在用户输入HTTP的请求消息后,由这个模拟器将HTTP请求发送给相应的服务器,再接收服务器的响应消息。这个HTTP模拟器有几下特点:

    1.  可以手工输入HTTP请求,并向服务器发送。

    2.  接收服务器的响应消息。

    3.  消息头和实体内容分段显示,也就是说,并不是象Telnet等客户端一样将HTTP响

    应消息全部显示,而是先显示消息头,然后由用户决定是否显示实体内容。

    4.  集中发送请求。这个HTTP模拟器和Telnet不同的是,并不是一开始就连接服务器,

    而是将域名、端口以及HTTP请求消息都输完后,才连接服务器,并将这些请求发送给服务器。这样做的可以预防服务器提前关闭网络连接的现象。

    5. 可以循环做上述的操作。

    从以上的描述看,要实现这个HTTP模拟器需要以下五步:

    1.  建立一个大循环,在循环内部是一个请求/响应对。这样就可以向服务器发送多次请求/响应以了。下面的四步都是被包括在循环内部的。

    2.  从控制台读取域名和端口,这个功能可以由readHostAndPort(……)来完成。

    3.  从控制台读取HTTP请求消息,这个功能由readHttpRequest(……)来完成。

    4.  向服务器发送HTTP请求消息,这个功能由sendHttpRequest()来完成。

    5.  读取服务器回送的HTTP响应消息,这个功能由readHttpResponse(……)来完成。

    下面我们就来逐步实现这五步:

    一、建立一个大循环

    在建立这个循环之前,先建立一个中叫HttpSimulator的类,并在这个类中定义一个run方法用来运行这个程序。实现代码如下:

  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  =   " localhost " ;
  
011        private  String request  =   "" //  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( " err: "   +  e.getMessage());
  
031               }
  
032           }
  
033       }
  
034        public   static   void  main(String[] args)  throws  Exception
  
035       {
  
036            new  HttpSimulator().run();
  
037       }
  
038   }

    从上面的代码可以看出,第022、024、025和026分别调用了上述的四个方法。这些方法的具体实现将在后面讨论。上面的代码除了调用这四个核心方法外,还做了一些准备工作。在008至012行定义了一些以后要用到的变量。在016和017行使用控制台的输入流建立了BufferedReader对象,通过这个对象,可以直接从控制台读取字符串,而不是一个个地字节。

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接