============================================================================= ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Κυλινδρής Βασίλης ΑΡΙΘΜΟΣ ΜΗΤΡΩΟΥ: 0226 ΗΜΕΡΟΜΗΝΙΑ : 30-01-2026
============================1. ΠΕΡΙΓΡΑΦΗ ΕΡΓΑΣΙΑΣ============================ Η παρούσα εργασία υλοποιεί ένα σύστημα Client-Server βασισμένο στο πρωτόκολλο TCP. Ο Server δέχεται αιτήματα για μαθηματικές πράξεις από πολλαπλούς πελάτες (clients) ταυτόχρονα (Multithreaded) και καταγράφει τη δραστηριότητα σε αρχείο καταγραφής (log file).
============================2. ΔΟΜΗ ΑΡΧΕΙΩΝ====================================
Το project αποτελείται από τα εξής αρχεία:
- MathServer.java : Η κύρια κλάση του Server. Δημιουργεί το ServerSocket στη θύρα 5555 και αναθέτει κάθε νέα σύνδεση σε ξεχωριστό νήμα (thread).
- ClientHandler.java : Η κλάση που διαχειρίζεται την επικοινωνία με τον κάθε πελάτη. Υλοποιεί το πρωτόκολλο, τους υπολογισμούς, την τήρηση ιστορικού και την εγγραφή στο log.
- MathClient.java : Η εφαρμογή του πελάτη. Συνδέεται στον Server, διαβάζει εντολές από τον χρήστη και εμφανίζει τα αποτελέσματα.
- server.log : Αρχείο που δημιουργείται αυτόματα και περιέχει το ιστορικό όλων των αιτημάτων (Timestamp, IP, Command).
===========================3. ΟΔΗΓΙΕΣ COMPILE===================================
Για να κάνετε compile τον κώδικα, ανοίξτε ένα τερματικό στον φάκελο της εργασίας και εκτελέστε την παρακάτω εντολή:
javac MathServer.java ClientHandler.java MathClient.java
=========================4. ΟΔΗΓΙΕΣ ΕΚΤΕΛΕΣΗΣ (RUN)=================================
Η εφαρμογή απαιτεί δύο ξεχωριστά τερματικά: ένα για τον Server και ένα (ή περισσότερα) για τους Clients.
---------------------------------ΒΗΜΑ 1: Εκκίνηση Server------------------------------ Πατήστε στο IDE το run ή στο πρώτο τερματικό εκτελέστε:
java MathServer
(Θα εμφανιστεί το μήνυμα: "O Server ξεκίνησε στην θύρα 5555...")
-------------------------------ΒΗΜΑ 2: Εκκίνηση Client-------------------------------- Σε ένα δεύτερο (νέο) τερματικό εκτελέστε:
java MathClient
==============================5. ΥΠΟΣΤΗΡΙΖΟΜΕΝΕΣ ΕΝΤΟΛΕΣ================================ Ο χρήστης μπορεί να πληκτρολογήσει τις εξής εντολές:
- ADD x y : Πρόσθεση (π.χ. ADD 10 5 -> Αποτέλεσμα: 15.0)
- SUB x y : Αφαίρεση (π.χ. SUB 10 2)
- MUL x y : Πολλαπλασιασμός (π.χ. MUL 5 5)
- DIV x y : Διαίρεση (π.χ. DIV 20 4)
- POW x y : Ύψωση σε δύναμη (π.χ. POW 2 3 -> 2 εις την 3η)
- LAST : Εμφάνιση του τελευταίου αποτελέσματος υπολογισμού.
- COUNT : Εμφάνιση πλήθους αιτημάτων του συγκεκριμένου χρήστη.
- HIST : Εμφάνιση λίστας με τις τελευταίες 5 εντολές (Ιστορικό).
- HELP : Εμφάνιση λίστας διαθέσιμων εντολών.
- EXIT : Αποσύνδεση από τον Server και τερματισμός.
=================================6. ΣΗΜΕΙΩΣΕΙΣ ΥΛΟΠΟΙΗΣΗΣ==================================
- Ο Server είναι πολυνηματικός (Multithreaded), επιτρέποντας την ταυτόχρονη εξυπηρέτηση πολλών χρηστών.
- Η καταγραφή στο αρχείο
server.logείναι συγχρονισμένη (synchronized) για την αποφυγή συγκρούσεων (race conditions) κατά την εγγραφή από πολλαπλά νήματα. - Το ιστορικό και τα στατιστικά (COUNT, LAST) τηρούνται ξεχωριστά για κάθε συνδεδεμένο πελάτη (Stateful Server).