From 61017aee734cb0d1a37d05509f9bc7b148db9907 Mon Sep 17 00:00:00 2001 From: 3013050 <3013050@stud.hs-mannheim.de> Date: Wed, 15 Oct 2025 20:08:58 +0200 Subject: [PATCH] Added first discovery implementation and test client --- vs.pu01/vs.pu01/src/main/java/vs/Client.java | 32 ++++++++++++++++++++ vs.pu01/vs.pu01/src/main/java/vs/Server.java | 28 ++++++++++++----- 2 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 vs.pu01/vs.pu01/src/main/java/vs/Client.java diff --git a/vs.pu01/vs.pu01/src/main/java/vs/Client.java b/vs.pu01/vs.pu01/src/main/java/vs/Client.java new file mode 100644 index 0000000..93df9e8 --- /dev/null +++ b/vs.pu01/vs.pu01/src/main/java/vs/Client.java @@ -0,0 +1,32 @@ +package vs; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +public class Client { + public static void main(String[] args) { + try (DatagramSocket socket = new DatagramSocket()) { + socket.setBroadcast(true); + String message = "DISCOVER_SERVERS"; + byte[] buffer = message.getBytes(); + + InetAddress broadcastAddress = InetAddress.getByName("255.255.255.255"); + int port = 8888; + + DatagramPacket packetOut = new DatagramPacket(buffer, buffer.length, broadcastAddress, port); + + socket.send(packetOut); + + DatagramPacket packetIn = new DatagramPacket(new byte[512], 512); + socket.receive(packetIn); + + String received = new String(packetIn.getData(), 0, packetIn.getLength()); + System.out.println("Received: " + received + "IP: " + packetIn.getSocketAddress()); + } + catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/vs.pu01/vs.pu01/src/main/java/vs/Server.java b/vs.pu01/vs.pu01/src/main/java/vs/Server.java index a31ecad..d1d4817 100644 --- a/vs.pu01/vs.pu01/src/main/java/vs/Server.java +++ b/vs.pu01/vs.pu01/src/main/java/vs/Server.java @@ -12,18 +12,22 @@ public class Server { private static final ExecutorService executor = Executors.newFixedThreadPool(2); public interface PacketHandler { - void handlePacket(DatagramSocket socket, DatagramPacket packet, String serviceName); + void handlePacket(DatagramSocket socket, DatagramPacket packet, String serviceName) throws IOException; } public static void main(String[] args) { - startSocket(new DiscoveryHandler(), 8888, "Discovery Service"); - startSocket(new SyslogHandler(), 8887, "Logging Service"); //? Port geraten idk + startSocket(new DiscoveryHandler(), 8888, "Discovery Service", 1); + startSocket(new SyslogHandler(), 514, "Logging Service", 2); } - private static void startSocket(PacketHandler handler, int port, String serviceName) { + private static void startSocket(PacketHandler handler, int port, String serviceName, int serviceID) { executor.execute(() -> { try (DatagramSocket socket = new DatagramSocket(port)) { - DatagramPacket packetIn = new DatagramPacket(new byte[BUFFSIZE], BUFFSIZE); //? Nicht sicher ob die Arguments richtig sind + if (serviceID == 1) { + socket.setBroadcast(true); + } + + DatagramPacket packetIn = new DatagramPacket(new byte[BUFFSIZE], BUFFSIZE); System.out.println(serviceName + " listening on port " + port); @@ -42,15 +46,23 @@ public class Server { static class SyslogHandler implements PacketHandler { @Override - public void handlePacket(DatagramSocket socket, DatagramPacket packet, String serviceName) { + public void handlePacket(DatagramSocket socket, DatagramPacket packetIn, String serviceName) { } } static class DiscoveryHandler implements PacketHandler { @Override - public void handlePacket(DatagramSocket socket, DatagramPacket packet, String serviceName) { - + public void handlePacket(DatagramSocket socket, DatagramPacket packetIn, String serviceName) throws IOException { + DatagramPacket packetOut = new DatagramPacket(new byte[BUFFSIZE], BUFFSIZE); + + packetOut.setSocketAddress(packetIn.getSocketAddress()); + packetOut.setData(new byte[0]); + packetOut.setLength(0); + + System.out.println("Found client, responding"); + + socket.send(packetOut); } } }