From 7fa132f9243d387898b377b85808f99e3c67b200 Mon Sep 17 00:00:00 2001 From: Elrabu <busch.elias@web.de> Date: Sat, 25 Nov 2023 15:18:15 +0100 Subject: [PATCH] Update: TestServer can handle Multiple running instances. --- .../TestServer/ConnectionHandling.java | 10 ++- .../Model/Multiplayer/TestServer/Server.java | 88 +++++++++++++------ 2 files changed, 66 insertions(+), 32 deletions(-) diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java index 7a61a050..804c6fef 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java @@ -6,9 +6,13 @@ public class ConnectionHandling { public static void main(String[] args) throws IOException { Client client = new Client(); - client.startConnection("localhost", 45371); - String response = client.sendMessage("hello"); - System.out.println(response); + client.startConnection("localhost", 4444); + String resp1 = client.sendMessage("hello"); + System.out.println(resp1); + Client client1 = new Client(); + client1.startConnection("localhost", 4444); + String resp2 = client1.sendMessage("hello"); + System.out.println(resp2); } } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java index 5c14c36e..1ebd2d28 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java @@ -8,48 +8,78 @@ import java.net.*; import java.io.*; public class Server { - - private ServerSocket serverSocket; - private Socket clientSocket; - private PrintWriter out; - private BufferedReader in; - - private static final Logger log = LogManager.getLogger(ConnectionHandler.class); public static void main(String[] args) throws IOException { Server server = new Server(); - server.start(45371); + server.start(4444); } public void start(int port) throws IOException { serverSocket = new ServerSocket(port); - clientSocket = serverSocket.accept(); - - //Data that is Outputed from the server - out = new PrintWriter(clientSocket.getOutputStream(), true); - - //Data that is inputed to the server - in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); - - String greeting = in.readLine(); - - String message = "Your Message was: " + greeting; - - if ("hello".equals(greeting)) { - out.println("hello client " + message); - } - else { - out.println("unrecognised greeting " + message); - } + while (true) + new EchoClientHandler(serverSocket.accept()).start(); } public void stop() throws IOException { - in.close(); - out.close(); - clientSocket.close(); serverSocket.close(); } + private static class EchoClientHandler extends Thread { + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; + public EchoClientHandler(Socket socket) { + this.clientSocket = socket; + } + + public void run() { + try { + out = new PrintWriter(clientSocket.getOutputStream(), true); + } catch (IOException e) { + throw new RuntimeException(e); + } + try { + in = new BufferedReader( + new InputStreamReader(clientSocket.getInputStream())); + } catch (IOException e) { + throw new RuntimeException(e); + } + + String inputLine; + + try { + while ((inputLine = in.readLine()) != null) { + System.out.println("Received message from client: " + inputLine); + try { + if ((inputLine = in.readLine()) == null) break; + } catch (IOException e) { + throw new RuntimeException(e); + } + if (".".equals(inputLine)) { + out.println("bye"); + break; + } + out.println(inputLine); + out.flush(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + + + try { + in.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + out.close(); + try { + clientSocket.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } } -- GitLab