2011-11-11 6 views
0

私はjavaを使用して簡単なhttpクライアントサーバを作ろうとしています。クライアントの要求とサーバーの応答が表示されます。たとえば、サーバーから返信されますhttpサーバとクライアントはヘッドを実装してメソッドを取得します

HTTP/1.0 200 OK 
    Connection: Close. etc. 

私はエコークライアントサーバーを持っていました。今、私はエコーサーバをhttpサーバとして振舞っています。私は頭を実装する方法についてゴーグルを試してみましたが、クライアントで取得するが、私は通常、例のすべてが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は多少複雑であり、すべてのホイールを再発明する必要はないからです。ただし、HTTP用のRFCから直接開始することで、独自の実装を作成することは可能です。

関連する問題