diff --git a/examples/src/TcpExamples/TcpExample4DispatchServer.java b/examples/src/TcpExamples/TcpExample4DispatchServer.java new file mode 100644 index 0000000000000000000000000000000000000000..d889c89002b2663d85764ec45a88b4e9495c0388 --- /dev/null +++ b/examples/src/TcpExamples/TcpExample4DispatchServer.java @@ -0,0 +1,64 @@ +package TcpExamples; + +import java.io.IOException; +import java.net.*; + +/** + * This server program works a bit differently by creating and dispatching a + * new thread to handle multiple incoming socket connections, one after another, all running in parallel. + * This advanced technique is often used in high=performance high=capacity server programs. + * + * @see TcpExample4Client + * @see TcpExample4HandlerThread + * + * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a> + * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a> + * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a> + * + * @author Don McGregor + * @author Don Brutzman + * @author MV3500 class + */ +public class TcpExample4DispatchServer +{ + /** Default constructor */ + public TcpExample4DispatchServer() + { + // default constructor + } + /** + * Program invocation, execution starts here + * @param args command-line arguments + */ + public static void main(String[] args) + { + try { + ServerSocket serverSocket = new ServerSocket(2317); + TcpExample4HandlerThread handlerThread; + Socket clientConnection; + + int connectionCount = 0; // state variable + + System.out.println(TcpExample4DispatchServer.class.getName() + " ready to accept socket connections..."); + while (true) // infinite loop + { + clientConnection = serverSocket.accept(); // block until connected + + connectionCount++; // unblocked, got another connection + System.out.println("============================================================="); + System.out.println(TcpExample4DispatchServer.class.getName() + ".handlerThread invocation for connection #" + connectionCount + "..."); + handlerThread = new TcpExample4HandlerThread(clientConnection); + handlerThread.start(); // invokes the run() method in that object + System.out.println(TcpExample4DispatchServer.class.getName() + ".handlerThread is launched, awaiting another connection..."); + } + } catch (IOException e) { + System.out.println("Problem with " + TcpExample4DispatchServer.class.getName() + " networking:"); // describe what is happening + System.out.println("Error: " + e); + // Provide more helpful information to user if exception occurs due to running twice at one time + if (e instanceof java.net.BindException) { + System.out.println("*** Be sure to stop any other running instances of programs using this port!"); + } + } + System.out.println("============================================================="); + } +}