A complete Java implementation for the "ITHAKI Virtual Modem" project (AUTH ECE – Computer Networks). Includes RTT measurements, ARQ retransmission analysis, GPS parsing, JPEG retrieval, and structured session outputs.
This repository contains a modular Java implementation for analyzing modem-based communication in a virtual modem environment. The project performs:
-
Echo packet RTT measurements
-
ARQ-based packet transmission with FCS validation
-
JPEG image retrieval (error-free and error-induced)
-
GPS coordinate extraction and map image reconstruction
-
CSV logging and structured packet export
Two measurement sessions (session1 and session2) are included. Each session contains:
-
Raw CSV files generated by the Java client
-
Retrieved images (JPEG)
-
Plots derived from measurement data
-
A dedicated README describing the session outputs
The project is structured so that each session is fully reproducible and self-contained.
/
├── src/
│ └── userApplication/
│ ├── Main.java
│ ├── EchoHandler.java
│ ├── ARQHandler.java
│ ├── ImageHandler.java
│ ├── GPSHandler.java
│ ├── ModemUtils.java
│ ├── Packet.java
│ └── GPGGA.java
│
├── data_output/
│ ├── session1/
│ │ ├── data/
│ │ ├── plots/
│ │ └── README.md
│ │
│ └── session2/
│ ├── data/
│ ├── plots/
│ └── README.md
│
└── README.md
| File | Purpose |
|---|---|
| Main.java | Runs the full experiment: echo, GPS, ARQ, images, logging. |
| EchoHandler.java | Sends echo commands and measures RTT. |
| ARQHandler.java | Implements ACK/NACK ARQ protocol and FCS validation. |
| ImageHandler.java | Retrieves and decodes JPEG images from the modem. |
| GPSHandler.java | Parses GPS NMEA data and constructs map image commands. |
| GPGGA.java | GPS data model for latitude/longitude extraction. |
| ModemUtils.java | Shared utilities for modem I/O and CSV export. |
| Packet.java | Data model for packets (RTT, retransmissions, FCS). |
Each session directory contains:
-
Packet logs (CSV)
-
Derived plots (PNG)
-
Retrieved JPEG images
-
Session-specific README with analysis notes
The project separates code (src/) from experimental results (data_output/), ensuring clarity and reproducibility.
-
JDK 8 or newer
-
Standard Java I/O (no additional libraries required)
-
Ithaki Virtual Modem environment
-
Reliable serial/terminal configuration
javac src/*.java
java userApplication.Main
All output files are generated under the directory defined in FILES_PATH inside Main.java.
If you wish to separate results per session (e.g., session1, session2), adjust FILES_PATH accordingly before execution.
Ilias Korompilis
Academic and educational use only.