2011-11-11 41 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開始編寫自己的實現是非常有可能的。

相關問題