Άσκηση 4.2
Υλοποίηση
μια απλής
αρχιτεκτονικής
διανομέα και
ακτίνων
Θέση αρχείων = /ExerciseCode/C4/FourTwo/
Αυτή η άσκηση
χρησιμοποιεί
νήματα. Αν δεν
είστε
εξοικειωμένοι
με
την έννοια των
νημάτων ίσως
πρέπει να
περιμένετε
μέχρι το
κεφάλαιο 12
πριν την
εκτελέσετε.
Σε αυτή την
άσκηση θέλω να
εισάγετε ένα
μικρό κομμάτι
κώδικα
(περίπου
τρεις
εντολές) για
το κομμάτι
του διανομέα
μιας απλής
αρχιτεκτονικής
διανομέα και
ακτίνων.
Υπάρχουν και
πάλι δυο μέρη
σε αυτή
την άσκηση: το
ένα που
υλοποιεί
τον
διακομιστή ο
οποίος
λειτουργεί
ως ο
διανομέα και
ένα το οποίο
υλοποιεί
τον πελάτη.
Το τμήμα του
διακομιστή
περιέχει
μερικές
κλάσεις:
- Η κλάση ConnectionHandler
δημιουργεί
νήματα τα
οποία
επιτελούν το
έργο της
επικοινωνίας
με κάθε
πελάτη. Ένα νήμα
δημιουργείται
για κάθε
πελάτη.
- Η κλάση Server η
οποία
περιέχει των
κώδικα για
τον
διακομιστή. Ο
διακομιστής
λειτουργεί
περιμένοντας
για μια
σύνδεση από
τον πελάτη.
Κάθε φορά που
ξεκινά μια
σύνδεση
δημιουργείται
ένα νέο νήμα για
τον πελάτη
αυτό ενώ το
όνομα του
και το
αντικείμενο
PrintWriter
το οποίο
μεταβιβάζει
τα μηνύματα από
τον
διακομιστή
στον πελάτη
αποθηκεύονται
σε ένα hash table. Ο
χρήστης μπορεί
να στείλει
μηνύματα
σε κάθε
πελάτη
γράφοντας το
μήνυμα στο
πεδίο
κειμένου και
κάνοντας
κλικ
στο κουμπί Send.
Αυτό το μήνυμα
στέλνεται στη
συνέχεια σε
κάθε
πελάτη που
έχει
συνδεθεί.
Για να
ξεκινήσει
τον
διακομιστή, ο
χρήστης πρέπει
να κάνει κλικ
στο κουμπί Start
και για να
τον
σταματήσει
πρέπει να
πατήσει το
κουμπί Quit. Αυτή
είναι η
κλάση που
πρέπει να
αλλαχθεί
για την άσκηση.
- Η κλάση ServerSolution
είναι η λύση της άσκησης.
Το κομμάτι
του πελάτη
περιέχει δυο
κλάσεις:
- Η ClientThread
εγκαθιστά τη
σύνδεση με
τον
διακομιστή ο
οποίος
λειτουργεί
ως διανομέας.
- Η κλάση Client
περιέχει τα
αντικείμενα
του πελάτη
και εκτελεί
την
επεξεργασία
που
πελάτη. Το
παράθυρο του
πελάτη
περιέχει ένα
κουμπί το
οποίο θα
συνδέσει
τον πελάτη με
τον
διακομιστή
και ένα κουμπί
το οποίο
αποσυνδέει
τον πελάτη από
το
διακομιστή.
Όταν ο πελάτης
συνδέεται με
τον
διακομιστή,
στέλνει μια
συμβολοσειρά
με το όνομα
του. Έπειτα
περιμένει.
Όταν ο πελάτης
θέλει να
αποσυνδεθεί,
στέλνει πάλι
το όνομα του.
Ο
διακομιστής
θα στείλει
τότε την
συμβολοσειρα
"KILL" η οποία με τη
σειρά της θα
τερματίσει τη
λειτουργία
του πελάτη. Κάθε
πελάτης θα
πρέπει να έχει
ένα μοναδικό
όνομα ώστε να
λειτουργήσει
το πρόγραμμα.
Υπάρχουν
μερικά
πράγματα τα
οποία θέλω να
κάνετε. Είναι
όμως λίγο
περίπλοκο
καθώς θα
πρέπει να
εκτελέσετε
μερικά
αντίγραφα
του πελάτη
κάθε φορά με
διαφορετικό
όνομα.
- Πρώτα
εκτελέστε
τον
διακομιστή
σε ένα
παράθυρο του
MSDOS. Κάντε
κλικ στο
κουμπί Start
του
παραθύρου
που
εμφανίζεται.ΜΗΝ
ΞΕΧΑΣΕΤΕ ΝΑ
ΤΟ ΚΑΝΕΤΕ.
Μόνο έτσι θα
εκτελεστεί
ο
διακομιστής.
- Δώστε στον
πελάτη το
όνομα Client1. Μπορείτε να το κάνετε
γράφοντας Client1στην
ίδια MSDOS γραμμή
αφού έχετε
γράψει
java Client για να
εκτελέσετε
τον πελάτη. το
παράθυρο της
εφαρμογής
του πελάτη
πρέπει να
εμφανιστεί.
Πατήστε το
κουμπί register. Ο
πελάτης θα
συνδεθεί
τώρα με τον
δικομιστή.
Πρέπει να
χρησιμοποιήσετε
άλλο
παράθυρο MSDOS
από αυτό που
χρησιμοποιείτε
για το
διακομιστή..
-
Επαναλάβετε
το
προηγούμενο
βήμα αλλά
εκτελώντας
την εντολή java
Client Client2
χρησιμοποιώντας
ένα άλλο MSDOS
παράθυρο.
Εκτελέστε
τον κώδικα
και
συνδεθείτε
με τον
διακομιστή.
Τώρα θα πρέπει
να υπάρχουν
δυο
πελάτες
συνδεδεμένοι
με τον
διακομιστή.
- Επιστρέψτε
στον
διακομιστή.
Πρέπει να
δείτε κάποια
μηνύματα που
δηλώνουν ότι
οι πελάτες
έχουν
συνδεθεί.
- Γράψτε ένα
μήνυμα στο
πεδίο
μηνυμάτων του
διακομιστή.
Έπειτα κάντε
κλικ στο
κουμπί Send.
Εξετάστε και
τους δυο
πελάτες και
θα δείτε ότι
το μήνυμα
ελήφθη και
παρουσιάζεται
στις δυο
περιοχές
κειμένου.
- Κλείστε
τους
πελάτες
κάνοντας
κλικ στο
κουμπί Quit.
- Κλείστε
τον
διακομιστή
κάνοντας
κλικ στο
κουμπί Quit.
- Διαβάστε
τον κώδικα
δια τις
κλάσεις ConnectionHandler,
Server,
Client ΚΑΙ ClientThread και
καταλάβετε
την
επεξεργασία
που
επιτελείται.
Συγκεκριμένα,
πρέπει να
καταλάβετε
τον
ρόλο του hash table
στο να
συνδέει το
όνομα του
κάθε πελάτη (
για
παράδειγμα Client1)
με το
αντίστοιχο
αντικείμενο print
writer.
- Αλλάξτε τον
κώδικα της
κλάσης Server ώστε
να γίνεται η
αποστολή των
μηνυμάτων. για
να το
πετύχετε θα
πρέπει να
πάρετε το
κείμενο από το
πεδίο
κειμένου messagesOut.
- Ελέγξτε την
λύση σας
επαναλαμβάνοντας
τα 7 πρώτα βήματα
που
προηγήθηκαν
εκτελώντας
όμως αυτή τη
φορά την κλάση Server
την οποία
έχετε
αλλάξει