Java tutorial
/* This program is a part of the companion code for Core Java 8th ed. (http://horstmann.com/corejava) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ 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. @author Cay Horstmann @version 1.20 2004-08-03 */ public class ThreadedEchoServer { 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); 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 { /** Constructs a handler. @param i the incoming socket @param c the counter for the handlers (used in prompts) */ public ThreadedEchoHandler(Socket i) { incoming = i; } public void run() { try { try { InputStream inStream = incoming.getInputStream(); OutputStream outStream = incoming.getOutputStream(); Scanner in = new Scanner(inStream); PrintWriter out = new PrintWriter(outStream, 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; } } finally { incoming.close(); } } catch (IOException e) { e.printStackTrace(); } } private Socket incoming; }