Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 5.39 KB

File metadata and controls

81 lines (62 loc) · 5.39 KB

============================================================================= ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Κυλινδρής Βασίλης ΑΡΙΘΜΟΣ ΜΗΤΡΩΟΥ: 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).