Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RNPP Chat

P2P-Chat über UDP nach RNPP-1.0-Spezifikation. Java 25, ein-Klassen-Architektur mit zentraler Node-Komponente. Ohne Framework.

Bauen

mvn clean package

Erzeugt target/rnpp-chat-1.0.0-SNAPSHOT.jar (mit allen Dependencies).

Starten

java -jar target/rnpp-chat-1.0.0-SNAPSHOT.jar <username> [--ip <ipv4>]

Beispiele:

# Eigene IP automatisch erkennen
java -jar target/rnpp-chat-1.0.0-SNAPSHOT.jar alice

# Eigene IP explizit setzen (bei Multi-NIC empfohlen)
java -jar target/rnpp-chat-1.0.0-SNAPSHOT.jar alice --ip 192.168.1.10

Befehle

join [neighbour-ip ...]   Netz beitreten
leave                     Netz verlassen
send <ip> <text...>       Textnachricht senden
sendfile <ip> <path>      Datei senden
list                      Teilnehmer anzeigen
help                      Hilfe

Beispiel-Session

$ java -jar rnpp-chat-1.0.0-SNAPSHOT.jar alice
RNPP chat started as alice @ 192.168.1.10
Type 'help' for commands.
rnpp> list
IP                 User                 Hops
----------------------------------------------
192.168.1.10       alice                   0

# In einem anderen Terminal/Rechner:
$ java -jar rnpp-chat-1.0.0-SNAPSHOT.jar bob --ip 192.168.1.11
rnpp> join 192.168.1.10
rnpp> list
IP                 User                 Hops
----------------------------------------------
192.168.1.11       bob                     0
192.168.1.10       alice                   1
rnpp> send 192.168.1.10 Hallo Alice
rnpp> sendfile 192.168.1.10 ./test.txt

Empfangene Dateien landen im downloads/ Unterordner.

Protokoll-Anpassungen

Diese Variante weicht in einigen Punkten von der Standardspez ab:

  • ACK statt NACK für alle Unicast-Pakete (außer ACK selbst). Bestätigung pro Chunk.
  • Max 5 Wiederholungen im Intervall von 2 Sekunden je unbestätigtem Paket.
  • Hop > 15 wird verworfen (count-to-infinity-Schutz).
  • List sendet nur NON und DEL (kein ADD). Neue Peers propagieren über reguläre NON-Updates.
  • HopCount wird erst dekrementiert, dann ausgewertet beim Forwarding.
  • 60 Sekunden Timeout für unvollständige eingehende Transfers.
  • Dedup nur für Broadcasts (Hello, List, Terminate). Unicast wird nicht dedupliziert — sonst könnten Retransmits nicht funktionieren.

Architektur

src/main/java/de/haw/rnpp/
├── Main.java                    REPL + manuelles Wiring
├── application/
│   └── Node.java                Zentrale Protokoll-Logik
├── domain/
│   ├── packet/                  Header, Packet, PacketType, IDs, payload/*
│   ├── peer/                    PeerIdentity, Username
│   ├── routing/                 RoutingTable, RoutingEntry, EntryStatus
│   └── transfer/                IncomingTransfer, PendingPacket, Keys
└── infrastructure/
    ├── UdpGateway.java          DatagramSocket-Wrapper
    ├── UdpListener.java         Empfangs-Loop auf virtuellem Thread
    └── codec/                   Header- und Payload-Codecs

Anforderungen

  • JDK 25 (für virtuelle Threads + Pattern Matching)
  • Maven 3.8+
  • UDP-Port 1337 offen
  • Alle Peers im selben Subnetz (für Broadcasts)

About

implementation of created chat protocol for uni course

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages