diff --git a/chapter10/missionA/Handler.java b/chapter10/missionA/Handler.java new file mode 100644 index 0000000..c6cb2ea --- /dev/null +++ b/chapter10/missionA/Handler.java @@ -0,0 +1,45 @@ +package chapter10.missionA; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.Socket; + +public class Handler extends Thread { + + private final Socket conn; + + public Handler(Socket conn) { + this.conn = conn; + } + + @Override + public void run() { + System.out.println("Connected to " + conn.getRemoteSocketAddress()); + + try ( + Socket socket = conn; + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())) + ) { + String data; + + while ((data = in.readLine()) != null) { + String responseMessage; + + try { + int order = Integer.parseInt(data); + responseMessage = "Thank you for ordering " + order + " pizzas!\n"; + } catch (NumberFormatException e) { + responseMessage = "Wrong number of pizzas, please try again\n"; + } + + System.out.println("Sending message to " + conn.getRemoteSocketAddress()); + conn.getOutputStream().write(responseMessage.getBytes()); + } + } catch (IOException e) { + System.err.println("Handler: " + e.getMessage()); + } + + System.out.println("Connection with " + conn.getRemoteSocketAddress() + " has been closed"); + } +} diff --git a/chapter10/missionA/Main.java b/chapter10/missionA/Main.java new file mode 100644 index 0000000..97a2bf1 --- /dev/null +++ b/chapter10/missionA/Main.java @@ -0,0 +1,9 @@ +package chapter10.missionA; + +public class Main { + + public static void main(String[] args) { + Server server = new Server(); + server.start(); + } +} diff --git a/chapter10/missionA/Server.java b/chapter10/missionA/Server.java new file mode 100644 index 0000000..56734f6 --- /dev/null +++ b/chapter10/missionA/Server.java @@ -0,0 +1,38 @@ +package chapter10.missionA; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; + +public class Server { + + private static final int PORT = 12345; + + private final ServerSocket serverSocket; + + public Server() { + System.out.println("Starting up at: " + PORT); + + try { + serverSocket = new ServerSocket(PORT); + } catch (IOException e) { + System.err.println("Server stopped."); + throw new RuntimeException(e); + } + } + + public void start() { + System.out.println("Server listening for incoming connections"); + + while (true) { + try { + Socket conn = serverSocket.accept(); + System.out.println("Client connection request from " + conn.getRemoteSocketAddress()); + Thread thread = new Handler(conn); + thread.start(); + } catch (IOException e) { + System.err.println("Server: " + e.getMessage()); + } + } + } +}