diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java index 82b4a03da98a9caf93bd9bd52e5bd516d174a518..7bdf6b26638e408a8ddb55443d56a53d789cfbbc 100644 --- a/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java +++ b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java @@ -8,7 +8,8 @@ import java.net.ServerSocket; import java.net.Socket; /** - * + * Homework1: Open a socket and waiting for a client to connect to the socket. + * * @author simonschnitzler */ public class SchnitzlerUnicastNetworking { diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/README.md b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/README.md index 38a981a6457b9a74e9733f3c93572b085e78108b..4fd44c62635b1871d50e4fae2243855fd276afa1 100644 --- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/README.md +++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/README.md @@ -5,6 +5,6 @@ ## Description Modification of TcpExample3 and adding some code to implement a chat room with multiple clients. -The 'SchnitzlerServer' class sets up a server that listens for incoming client connections on port 2317. When a client connects, the server creates a new handler thread for managing communication with that client. Each client's messages are broadcast to all other connected clients. +The 'SchnitzlerServer' class sets up a server that listens for incoming client connections on port 2317. When a client connects, the server creates a new handler thread for managing communication with that client. For a successful connection a password must be entered. After that each client's messages are broadcast to all other connected clients. The 'SchnitzlerClient' class connects to a server running on localhost at port 2317. It sends user input from the console to the server and displays messages received from the server. \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerClient.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerClient.java index 82eb4915a5ce1c64fc81d152388f5d8d1dfb1daf..d1d3b1c85d67098d7be44e3cf1b99a95bcdd751e 100644 --- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerClient.java +++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerClient.java @@ -8,7 +8,8 @@ import java.net.Socket; import java.util.Scanner; /** - * + * Homework2: Client which connect to a server and prints all incoming messages of the server to the console. + * * @author simonschnitzler */ public class SchnitzlerClient { @@ -21,25 +22,28 @@ public class SchnitzlerClient { public static void main(String[] args) throws Exception { Socket socket = new Socket(LOCALHOST, 2317); - new Thread(new Reader(socket)).start(); + Thread connection = new Thread(new Reader(socket)); + connection.start(); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); Scanner scanner = new Scanner(System.in); - while (scanner.hasNextLine()) { + while (scanner.hasNextLine() && connection.isAlive()) { out.println(scanner.nextLine()); } } private static class Reader implements Runnable { private BufferedReader in; + private final Socket socket; public Reader(Socket socket) throws IOException { - in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + this.socket = socket; + in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); } @Override public void run() { - try { + try (socket){ String message; while ((message = in.readLine()) != null) { System.out.println(message); diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerServer.java b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerServer.java index 2f2323f5b3068b963cad413bf7ee3ecf1145723e..47cc363f2d1b7e8e2cea4178dc612913d39ddedb 100644 --- a/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerServer.java +++ b/assignments/src/MV3500Cohort2024JulySeptember/homework2/Schnitzler/SchnitzlerServer.java @@ -3,8 +3,6 @@ package MV3500Cohort2024JulySeptember.homework2.Schnitzler; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintStream; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; @@ -13,7 +11,8 @@ import java.util.HashSet; import java.util.Set; /** - * + * Homework2: Chatserver, which is waiting for clients to connect. The clients need to enter a password for a successfull connection. After a successfull connection all messages will be sent to all clients. + * * @author simonschnitzler */ public class SchnitzlerServer { @@ -27,20 +26,15 @@ public class SchnitzlerServer { System.out.println(SchnitzlerServer.class.getName() + " has started..."); // it helps debugging to put this on console first try (ServerSocket listener = new ServerSocket(2317)) { while (true) { - Handler handler = new Handler(listener.accept()); // create a new thread writing and reading to and from the new socket - OutputStream os = handler.socket.getOutputStream(); - PrintStream ps = new PrintStream(os); - - InetAddress remoteAddress = handler.socket.getInetAddress(); - int remotePort = handler.socket.getPort(); - String message = remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " has connected to the server."; + Socket socket = listener.accept(); + int remotePort = socket.getPort(); + InetAddress remoteAddress = socket.getInetAddress(); + String message = remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " tries to connect to the server."; System.out.println(message); - ps.println("Welcome " + remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " to the group chat!"); - for (PrintWriter writer : clientWriters) { - writer.println(message); - } - ps.flush(); - handler.start(); + Handler handler = new Handler(socket); + handler.start(); + + } }catch (IOException e) { System.err.println("Problem with " + SchnitzlerServer.class.getName() + " networking: " + e); @@ -67,19 +61,49 @@ public class SchnitzlerServer { try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); - - synchronized (clientWriters) { + + InetAddress remoteAddress = socket.getInetAddress(); + int remotePort = socket.getPort(); + out.println("Speak, friend, and enter!"); + String answer = in.readLine(); + if("Mellon".equals(answer)){ + String message = remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " has connected to the server."; + System.out.println(message); + out.println("Welcome " + remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + " to the group chat!"); + for (PrintWriter writer : clientWriters) { + writer.println(message); + } + out.flush(); + synchronized (clientWriters) { clientWriters.add(out); - } + } - String message; - while ((message = in.readLine()) != null) { - String outputMessage = socket.getInetAddress().getHostName() + "=" + socket.getInetAddress().getHostAddress() + ", " + socket.getPort()+ ": " + message; + while ((message = in.readLine()) != null) { + String outputMessage = socket.getInetAddress().getHostName() + "=" + socket.getInetAddress().getHostAddress() + ", " + socket.getPort()+ ": " + message; + System.out.println(outputMessage); + for (PrintWriter writer : clientWriters) { + writer.println(outputMessage); + } + } + String outputMessage = socket.getInetAddress().getHostName() + "=" + socket.getInetAddress().getHostAddress() + ", " + socket.getPort()+ " has disconnected!"; System.out.println(outputMessage); for (PrintWriter writer : clientWriters) { writer.println(outputMessage); } + } + else{ + try (socket) { + String message = remoteAddress.getHostName() + "=" + remoteAddress.getHostAddress() + ", " + remotePort + ": Connection denied!"; + System.out.println(message); + out.println(message); + socket.close(); + }catch (IOException e) { + System.out.println("Couldn't close a socket, what's going on?"); + } + } + + } catch (IOException e) { System.out.println("Error handling client: " + e); } finally {