Mega Code Archive

 
Categories / Java / Network Protocol
 

Implements a multithreaded server that listens to port 8189 and echoes back all client input

/*    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; }