2011-11-11 38 views
0

我想使用java做一个简单的http客户端服务器。它将显示客户端的请求以及服务器的响应。例如服务器将发回http服务器和客户端实现头并得到方法

HTTP/1.0 200 OK 
    Connection: Close. etc. 

以前我有一个回声客户端服务器。现在我已经把我的回显服务器变成了一个http服务器。我已经尝试了如何实现头部和客户端的Goggling,但我通常注意到所有的例子都使用了apache框架。有没有办法在没有Apache框架的情况下实现这些方法。 我,我正在尝试转换成HTTP客户端的回声:

 import java.io.*; 
     import java.net.*; 

      public class Ec1 
     { 
     public static void main(String[] args) 
     { 
      try 
     { 
      Socket s = new Socket("127.0.0.1", 80); 
     BufferedReader r = new BufferedReader(new         InputStreamReader(s.getInputStream())); 
      PrintWriter w = new PrintWriter(s.getOutputStream(), true); 
      BufferedReader con = new BufferedReader(new InputStreamReader(System.in)); 
      String line; 
      do 
     { 
     line = r.readLine(); 
      if (line != null) 
     System.out.println(line); 
     line = con.readLine(); 
      w.println(line); 
     } 
     while (!line.trim().equals("bye")); 
      } 
      catch (Exception err) 
     { 
     System.err.println(err); 
     } 
     } 
    } 

我的HTTP服务器:

  import java.io.BufferedReader; 
      import java.io.InputStreamReader; 
      import java.io.PrintWriter; 
      import java.net.ServerSocket; 
      import java.net.Socket; 

      public class Echo 
       { 

protected void start() { 
     ServerSocket s; 

     System.out.println("Webserver starting up on port 80"); 

     try { 
      // create the main server socket 
      s = new ServerSocket(80); 
     } catch (Exception e) { 
      System.out.println("Error: " + e); 
      return; 
     } 
     Socket clientSocket = null; 
     System.out.println ("Waiting for connection....."); 
     try { 
      clientSocket = s.accept(); 
      System.out.println("Connection, sending data."); 
      BufferedReader in = new BufferedReader(new InputStreamReader(
        clientSocket.getInputStream())); 
      PrintWriter out = new PrintWriter(clientSocket.getOutputStream()); 


      String str = "."; 
      while (!str.equals("")) 
       str = in.readLine(); 


      out.println("HTTP/1.0 200 OK"); 
      out.println("Content-Type: text/html"); 
      out.println("Server: Bot"); 

      out.println(""); 

      out.println("<H1>Welcome to the Ultra Mini-WebServer</H2>"); 
      out.flush(); 
      clientSocket.close(); 
      s.close(); 
      } catch (Exception e) { 
      System.out.println("Error: " + e); 
      } 
     } 

     public static void main(String args[]) { 
      WebServer ws = new WebServer(); 
      ws.start(); 
        } 
      } 

回答

1

是的,只是解释你从客户端获得的请求。

从下面的代码(在HttpServer),解析:

String str = "."; 
while (!str.equals("")) { 
    str = in.readLine(); 

    if (str.startsWith("HEAD")) { 
     //Head execution here... 
    } 
} 

等等...

1

每个人都使用某种库或框架的客户端和/或服务器因为HTTP有点复杂,并且不需要重新发明每一个轮子。但是,通过直接从RFC的RFC开始编写自己的实现是非常有可能的。

相关问题