Σκοπός του project είναι η κατασκευή ενός συστήματος πελάτη-εξυπηρετητή με χρήση Sockets (Sockets-I/O streams-Threads). Ο εξυπηρετητής μπορεί να διαχειρίζεται παράλληλα τις αιτήσεις από τους πελάτες με τη βοήθεια νημάτων.
Έχουν υλοποιηθεί τέσσερις κλάσεις: Message, Account, Client και Server όπως ζητούνται στο έγγραφο απαιτήσεων.
Η κλάση Message αναπαριστά ένα μήνυμα που στέλνεται από έναν λογαριασμό σε έναν άλλον και περιέχει απλές μεθόδους και χαρακτηριστικά.
Η κλάση Account αντιπροσωπεύει τον λογαριασμό ενός χρήστη. Περιέχει μια λίστα με εισερχόμενα μηνύματα, το γραμματοκιβώτιο του χρήστη, τα οποία μπορεί μέσω κατάλληλων μεθόδων να προσπελαύνει και να επεξεργάζεται.
Η κλάση Client αποτελεί την υλοποίηση του πελάτη. Εκτελείται με την εξής εντολή: java client <FN_ID> Κατά την εκτέλεση αρχικά συνδέεται με τον εξυπηρετή στη σωστή διεύθυνση IP και το σωστό port, όπως αυτά δίνονται, στη συνέχεια στέλνει το αναγνωριστικό λειτουργίας μαζί με τις υπόλοιπες παραμέτρους λειτουργίας ως ενιαία συμβολοσειρά στον εξυπηρετητή, δέχεται την απάντησή του, την προβάλλει στο τερματικό και τερματίζει την εκτέλεση.
Η κλάση Server αποτελεί τον μοναδικό εξυπηρατητή του συστήματος. Διατηρεί μία λίστα με λογαριασμούς χρηστών, οι οποίοι χρειάζονται μοναδικούς αριθμούς αναγνώρισης, γι' αυτό και χρησιμοποιεί μια γεννήτρια κρυπτογραφικά ισχυρών αριθμών. Επίσης κρατά μια ακέραια μεταβλητή για την μονααδική απαρίθμηση των μηνυμάτων που στέλνονται. Για την διαχείριση των αιτημάτων κάθε πελάτη χρησιμοποιεί την εσωτερική κλάση ClientHandler. Ανάλογα με το αναγνωριστικό λειτουργίας καλεί την κατάλληλη μέθοδο και αποστέλλει την απάντησή του στον πελάτη, όπως αυτή ορίζεται στις απαιτήσεις.
Να σημειωθεί ότι η εκτέλεση των προγραμμάτων γινόταν στο περιβάλλον του IntelliJ μέσω του Run -> Edit Configurations.