diff --git a/justfile b/justfile index f5abb79..15706c8 100644 --- a/justfile +++ b/justfile @@ -5,7 +5,7 @@ set shell := ["powershell.exe", "-c"] default: mvn clean compile test exec class +args="": compile - mvn exec:java "-Dexec.mainClass={{class}}" "-Dexec.args={{args}}" + mvn exec:java "-Dexec.mainClass=vs.{{class}}" "-Dexec.args={{args}}" clean: mvn clean compile: diff --git a/src/main/java/vs/SyslogClient.java b/src/main/java/vs/SyslogClient.java index 4a3af1d..8dff648 100644 --- a/src/main/java/vs/SyslogClient.java +++ b/src/main/java/vs/SyslogClient.java @@ -7,11 +7,12 @@ import java.nio.charset.StandardCharsets; public class SyslogClient { + private static final int PORT = 514; public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(); socket.setBroadcast(true); - // 🔍 Discovery (Unverändert) + // Discovery byte[] discoverMsg = "DISCOVER".getBytes(); DatagramPacket packet = new DatagramPacket( discoverMsg, discoverMsg.length, @@ -19,13 +20,16 @@ public class SyslogClient { ); socket.send(packet); - // 📥 Antwort empfangen (Unverändert) + // Antwort empfangen byte[] buffer = new byte[256]; DatagramPacket response = new DatagramPacket(buffer, buffer.length); socket.receive(response); System.out.println("Server gefunden: " + response.getAddress()); - // 📨 ECHTE RFC 5424 Syslog-Nachricht aus DEINEN Klassen bauen! + // ECHTE RFC 5424 Syslog-Nachricht aus AsciiChars & SyslogMessage + // args als massage, ansonsten default message + String text = (args.length > 0) ? String.join(" ", args): "Dies ist eine standardkonforme Testnachricht"; + SyslogMessage msg = new SyslogMessage( SyslogMessage.Facility.USER, SyslogMessage.Severity.INFORMATIONAL, @@ -34,7 +38,7 @@ public class SyslogClient { new AsciiChars.L128("PID1234"), new AsciiChars.L032("MSG-01"), new StructuredData().add(StructuredData.Element.newTimeQuality(true, true)), - new SyslogMessage.TextMessage("Das ist eine standardkonforme Nachricht!") + new SyslogMessage.TextMessage(text) ); // Die Klasse wandelt alles in den perfekten String um (inklusive Zeitstempel) @@ -45,7 +49,7 @@ public class SyslogClient { byte[] data = logString.getBytes(StandardCharsets.UTF_8); DatagramPacket syslogPacket = new DatagramPacket( - data, data.length, response.getAddress(), 514 + data, data.length, response.getAddress(), PORT ); socket.send(syslogPacket); diff --git a/src/main/java/vs/SyslogServer.java b/src/main/java/vs/SyslogServer.java index 42b6c69..df57486 100644 --- a/src/main/java/vs/SyslogServer.java +++ b/src/main/java/vs/SyslogServer.java @@ -44,8 +44,14 @@ public class SyslogServer { } String message = new String(packet.getData(), 0, length, StandardCharsets.UTF_8); + + // BOM-zeichen ersetzten + message = message.replace("", "Nachricht: "); - // 📡 Ausgabe mit Client-IP + // Zur Sicherheit AUCH noch das Unicode-Zeichen des BOM-Zeichens + message = message.replace("\uFEFF", "Nachricht: "); + + // Ausgabe mit Client-IP System.out.println( "[SYSLOG] Von " + packet.getAddress().getHostAddress() + @@ -78,7 +84,7 @@ public class SyslogServer { clientAddress.getHostAddress() ); - // Antwort (leer reicht laut Aufgabe) + // Antwort leer(laut Aufgabe) byte[] responseData = new byte[0]; DatagramPacket response = new DatagramPacket(