import java.net.*;
import java.io.*;

public class MultiServer {
    
    final static short port = 4444;
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;
        boolean doomsday = true;

        try {
            System.out.println("New server");
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            System.err.println("Could not listen on port: "+port+".");
            System.exit(-1);
        }

        while (doomsday)
	    
	    new MultiServerThread(serverSocket.accept()).start();

        serverSocket.close();
    }
}

class MultiServerThread extends Thread {
    private Socket socket = null;

    public MultiServerThread(Socket socket) {
	super("MultiServerThread");
	this.socket = socket;
    }

    public void run() {

	try {
	    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
	    BufferedReader in = new BufferedReader(
				    new InputStreamReader(
				    socket.getInputStream()));

	    String inputLine, outputLine;

	    while ((inputLine = in.readLine()) != null) {
		outputLine = inputLine;
		out.println(outputLine);
		if (outputLine.equals("Bye"))
		    break;
	    }
	    out.close();
	    in.close();
	    socket.close();

	} catch (IOException e) {
	    e.printStackTrace();
	}
    }
}