Σχεδιασμός και κατασκευή ενός υβριδικού αμυντικού αυτοματοποιημένου ρομποτικού συστήματος
171
πρωτόκολλο αυτό είναι ότι απλά μεταφέρει τη ροή δεδομένων χωρίς να γνωρίζει τι είδους
πληροφορία μεταφέρει.
Από την άλλη πλευρά βρίσκεται το πρωτόκολλο UDP, το οποίο στέλνει τα δεδομένα
σε κομμάτια που αποκαλούνται datagrams [27]. Το πρωτόκολλο αυτό είναι αναξιόπιστο,
καθώς μερικές φορές η πληροφορία που μεταφέρεται μπορεί να μην είναι ολόκληρη ή να
αποσταλεί με λάθος σειρά, με αποτέλεσμα το μήνυμα που θα ληφθεί να μην είναι σωστό.
Τα βήματα που παρουσιάζονται σχηματικά στην Εικόνα 84, εκτελούνται κάθε φορά για την
επίτευξη της επικοινωνίας μεταξύ client-server, ανεξάρτητα πρωτοκόλλου, είναι τα εξής:
1. Δημιουργία socket. Τόσο ο server όσο και ο client έχουν την ανάγκη δημιουργίας
socket για ξεχωριστούς λόγους. Ο server δημιουργεί το socket για να «ακούσει» εάν
υπάρχουν νέες συνδέσεις, ενώ ο client το χρησιμοποιεί για να συνδεθεί με το server.
Η δημιουργία του socket γίνεται με την κλήση της συνάρτησης socket().
2. Για να επιτευχθεί η σύνδεση του client με το server πρέπει να γίνει γνωστοποίηση της
διεύθυνσής τους. Τα socket που δημιουργούνται από το server ακούνε μόνο για νέες
συνδέσεις, επομένως θα πρέπει να γίνει μια ανάθεση της διεύθυνσης του client, μιας
και εκείνος αιτείται σύνδεση με το server, με το socket του server. Η ανάθεση
διεύθυνσης αυτή επιτυγχάνεται με τη βοήθεια της συνάρτησης bind().
3. Εφόσον στο socket έχει ανατεθεί μια διεύθυνση, σταματά αυτόματα η διαδικασία της
«ακοής» για επιπλέον συνδέσεις. Για να εξασφαλιστεί όμως ότι δεν θα χαθούν
εισερχόμενες συνδέσεις, δημιουργείται μια ουρά αναμονής. Αυτό επιτρέπει στις
εισερχόμενες συνδέσεις να περιμένουν στην ουρά, ενώ ο διακομιστής είναι
κατειλημμένος. Η παραπάνω διαδικασία επιτυγχάνεται με την κλήση της συνάρτησης
listen().
4. Από την πλευρά του client, μόλις δημιουργηθεί το socket πρέπει να επιτευχθεί η
σύνδεση με το server. Μόλις ενεργοποιηθεί η σύνδεση, ενεργοποιείται αυτόματα και
το socket και ξεκινά η αποστολή και η λήψη δεδομένων. Η συνάρτηση connect() είναι
εκείνη που δείχνει εάν μια σύνδεση είναι ενεργή.