package javademo.net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* This program implements a multithreaded server that listens to port 8189 and
* echoes back all client input.
*/
public class ThreadedEchoServer
{
/**
* @param args
*/
public static void main(String[] args)
{
try
{
int i = 1;
ServerSocket s = new ServerSocket(8189);
while (true)
{
Socket incoming = s.accept();
System.out.println("Spawning " + i);
Runnable r = new ThreadedEchoHandler(incoming, i);
Thread t = new Thread(r);
t.start();
i++;
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
/**
* This class handles the client input for one server socket connection.
*/
class ThreadedEchoHandler implements Runnable
{
public ThreadedEchoHandler(Socket i, int c)
{
incoming = i;
counter = c;
}
@Override
public void run()
{
try
{
try
{
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true/* autoFlash */);
out.println("Hello! Enter BYE to exit.");
// echo client input
boolean done = false;
while (!done && in.hasNextLine())
{
String line = in.nextLine();
out.println("Echo: " + line);
if (line.trim().equals("BYE"))
done = true;
}
}
finally
{
incoming.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("Thread " + counter + " exit.");
}
private Socket incoming;
private int counter;
}