82 lines
2.0 KiB
Java
82 lines
2.0 KiB
Java
package threaded;
|
|
|
|
import java.io.*;
|
|
import java.net.*;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* This program implements a multithreaded server that listens to port 8189 and echoes back
|
|
* all client input.
|
|
* @author Cay Horstmann
|
|
* @version 1.22 2016-04-27
|
|
*/
|
|
public class ThreadedEchoServer
|
|
{
|
|
public static void main(String[] args )
|
|
{
|
|
try (ServerSocket s = new ServerSocket(8189))
|
|
{
|
|
int i = 1;
|
|
|
|
while (true)
|
|
{
|
|
Socket incoming = s.accept();
|
|
System.out.println("Spawning " + i);
|
|
Runnable r = new ThreadedEchoHandler(incoming);
|
|
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
|
|
{
|
|
private Socket incoming;
|
|
|
|
/**
|
|
Constructs a handler.
|
|
@param incomingSocket the incoming socket
|
|
*/
|
|
public ThreadedEchoHandler(Socket incomingSocket)
|
|
{
|
|
incoming = incomingSocket;
|
|
}
|
|
|
|
public void run()
|
|
{
|
|
try (InputStream inStream = incoming.getInputStream();
|
|
OutputStream outStream = incoming.getOutputStream())
|
|
{
|
|
Scanner in = new Scanner(inStream, "UTF-8");
|
|
PrintWriter out = new PrintWriter(
|
|
new OutputStreamWriter(outStream, "UTF-8"),
|
|
true /* autoFlush */);
|
|
|
|
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;
|
|
}
|
|
}
|
|
catch (IOException e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|