/*
 * Java Network Programming, Second Edition
 * Merlin Hughes, Michael Shoffner, Derek Hamner
 * Manning Publications Company; ISBN 188477749X
 *
 * http://nitric.com/jnp/
 *
 * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner;
 * all rights reserved; see license.txt for details.
 */

import java.io.*;
import java.net.*;

public class MTEchoServer extends Thread {
  protected Socket socket;
  
  MTEchoServer (Socket socket) {
    this.socket = socket;
  }
  
  public void run () {
    try {
      InputStream in = socket.getInputStream ();
      OutputStream out = socket.getOutputStream ();
      out.write ("Welcome to the multithreaded echo server.\r\n"
                 .getBytes ("latin1"));
      byte[] buffer = new byte[1024];
      int read;
      while ((read = in.read (buffer)) >= 0)
        out.write (buffer, 0, read);
    } catch (IOException ex) {
      ex.printStackTrace ();
    } finally {
      try {
        socket.close ();
      } catch (IOException ignored) {
      }
    }
  }

  public static void main (String[] args) throws IOException {
    if (args.length != 1)
      throw new IllegalArgumentException ("Syntax: MTEchoServer <port>");
    System.out.println ("Starting on port " + args[0]);
    ServerSocket server = new ServerSocket (Integer.parseInt (args[0]));
    while (true) {
      Socket client = server.accept ();
      MTEchoServer echo = new MTEchoServer (client);
      echo.start ();
    }
  }
}
