Added first discovery implementation and test client

main
Victor Hans-Georg Waitz 2025-10-15 20:08:58 +02:00
parent 9b2775d8ae
commit 61017aee73
2 changed files with 52 additions and 8 deletions

View File

@ -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();
}
}
}

View File

@ -12,18 +12,22 @@ public class Server {
private static final ExecutorService executor = Executors.newFixedThreadPool(2); private static final ExecutorService executor = Executors.newFixedThreadPool(2);
public interface PacketHandler { 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) { public static void main(String[] args) {
startSocket(new DiscoveryHandler(), 8888, "Discovery Service"); startSocket(new DiscoveryHandler(), 8888, "Discovery Service", 1);
startSocket(new SyslogHandler(), 8887, "Logging Service"); //? Port geraten idk 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(() -> { executor.execute(() -> {
try (DatagramSocket socket = new DatagramSocket(port)) { 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); System.out.println(serviceName + " listening on port " + port);
@ -42,15 +46,23 @@ public class Server {
static class SyslogHandler implements PacketHandler { static class SyslogHandler implements PacketHandler {
@Override @Override
public void handlePacket(DatagramSocket socket, DatagramPacket packet, String serviceName) { public void handlePacket(DatagramSocket socket, DatagramPacket packetIn, String serviceName) {
} }
} }
static class DiscoveryHandler implements PacketHandler { static class DiscoveryHandler implements PacketHandler {
@Override @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);
} }
} }
} }