import java.io.*;
import java.net.*;

public class Pphttpd {
  public static void main(String args[]){

    // サーバ用ソケットの作成
    ServerSocket servsock = null;
    try {
      servsock = new ServerSocket(Integer.parseInt(args[0]));
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    } 
    while(true){
      try {
        Socket sock = servsock.accept(); // 接続要求の受付
        // 以下の処理は、時間がかかる場合は、
        // 本来はすぐに接続要求の受付に戻れるように、スレッドで行なうべきである。
        // （この程度の例だとスレッドを作るほうが重い処理になる。）
        // 接続先の表示
        System.out.println("Request from "
            + (sock.getInetAddress()).getHostName());
        // 効率を考慮してバッファを利用する。 
        // （1文字ずつではなく、まとめて読めるようにする。）
        BufferedReader in  = new BufferedReader(
            new InputStreamReader(sock.getInputStream()));
        // printlnメソッドが使えるように PrintStreamクラスを用いる
        PrintStream out = new PrintStream(sock.getOutputStream());
        // とりあえず改行を２つ読み飛ばす
        int i ;
        for(i=0; i<2; i++) {
          in.readLine();
        }
        out.println("<html>");
        out.println("<head><title>Test</title></head>");
        out.println("<body>Hello!</body>");
        out.println("</html>");
        sock.close();   // 接続終了
      } catch (IOException e){
        e.printStackTrace();
      }
    }
  }
}
