14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

Σχετικά έγγραφα
Ειδικά Θέματα Προγραμματισμού

Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στον Κατανεμημένο Προγραμματισμό

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

Εργαστήριο Java. Αντικείµενο: Δίκτυα. Χειρισµός URLs. Άσκηση 1. Lab11. Πακέτο java.net

ιαδικτυακές Εφαρµογές

ικτύωσησε Java Κατανεµηµένα Συστήµατα 08-1

{ πρωτόκολλο, τοπική-διεύθυνση, τοπική-διεργασία, απομακρυσμένη-διεύθυνση, απομακρυσμένη-διεργασία }

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

6. Εξαιρέσεις στη γλώσσα Java

1.2.2 Το μοντέλο δικτύωσης TCP/IP 1 / 26

Κατανεμημένα Συστήματα. Ενότητα # 4: Μηχανισμοί Επικοινωνίας Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ΥΛΟΠΟΙΗΣΗ ΠΡΟΤΥΠΩΝ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΤΗ ΒΙΒΛΙΟΘΗΚΗ JAVA.NET ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΥ ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΟΥ ΤΕΕ

ΤΕΧΝΟΛΟΓΙΑ ΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Κατανεμημένα Συστήματα

Κεφάλαιο 7.3. Πρωτόκολλο TCP

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Γενικές Αρχές. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

(C) 2010 Pearson Education, Inc. All rights reserved.

Α2. Να γράψετε τους αριθμούς 1-5 από τη Στήλη Α και δίπλα το γράμμα της Στήλης Β που δίνει τη σωστή αντιστοίχηση.

Δίκτυα Θεωρία

HY335 4ο Φροντιστήριο

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #11 η : Διαδικτυακές Εφαρμογές με τη Java

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΑΝΑΠΤΥΞΗ 3D ΠΕΡΙΒΑΛΛΟΝΤΟΣ ΔΡΑΣΗΣ ΚΑΙ ΣΥΝΕΡΓΑΣΙΑΣ ΑΠΟΜΑΚΡΥΣΜΕΝΩΝ

Πρωτόκολλα Διαδικτύου

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 7ο ΚΕΦΑΛΑΙΟ

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

7.2 Τεχνολογία TCP/IP

Λειτουργικά Συστήματα

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

7.2.2 Σχέση OSI και TCP/IP

Εισαγωγή στον Προγραμματισμό

7.4 Πρωτόκολλο UDP. 3. Στη περίπτωση που ένα μήνυμα χωράει σε ένα τμήμα, χρησιμοποιούμε το πρωτόκολλο TCP.

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Φροντιστήριο Α' Κατανεμημένα Συστήματα Επιμέλεια: Μπούτσης Ιωάννης

Εισαγωγή Επανάληψη. ΤΕΙ Στερεάς Ελλάδας. ΣT Εξάμηνο, Κατεύθυνση Μηχανικών Δικτύων Τ.Ε. Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διαδικτυακός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Εργασία Μαθήματος Αξία: 40% του τελικού σας βαθμού Ανάθεση: Παράδοση:

Τεχνολογία TCP/IP ΙΑ ΙΚΤΥΩΣΗ- INTERNET. Τεχνολογίες Τηλεκπαίδευσης & Εφαρµογές - Ιούλιος

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Μάθημα 6: Αρχιτεκτονική TCP/IP

Κεφάλαιο 7 Διαδικτύωση-Internet. 7.2 Τεχνολογία TCP/IP

Φροντιστήριο Α' Κατανεμημένα Συστήματα Επιμέλεια: Μπούτσης Ιωάννης

Mεταβλητές (variables) και Σταθερές (constants)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αρχεία

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

Δίκτυα Υπολογιστών Firewalls. Χάρης Μανιφάβας

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Ιόνιο Πανεπιστήµιο Τµήµα Αρχειονοµίας Βιβλιοθηκονοµίας. Μοντέλο TCP/IP. Ενότητα E. Συστήµατα Επικοινωνίας

Φύλλο Εργασίας 1 ου Κεφαλαίου

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ / ΕΠΑΛ(Α & Β ΟΜΑΔΑ) ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 11/12/2011 ΑΠΑΝΤΗΣΕΙΣ

Network Address Translation (NAT)

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

Remote Method Invocation (RMI)

Αντικειµενοστρεφής Προγραµµατισµός

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

//στο pin 3 του μικροελεγκτή συνδέουμε το control pin του ρελέ. WRITE 'I am on' στο SOCKET // λέω στον client ότι άναψα τη λάμπα

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

ΠΡΩΤΟΚΟΛΛΟ TCP/IP ΜΑΚΡΟΠΟΥΛΟΣ ΝΙΚΟΛΑΟΣ

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

FTP - (File Transfer Protocol ) Πρωτόκολλο Μεταφοράς Αρχείων

Ιόνιο Πανεπιστήµιο Τµήµα Πληροφορικής Συστήµατα Επικοινωνίας. Μοντέλο TCP/IP. Ενότητα E. Πόσοι εµπλέκονται σε ένα Σύστηµα Επικοινωνίας

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

7.11 Πρωτόκολλα Εφαρµογής Βασικές και Προηγµένες Υπηρεσίες ιαδικτύου. Ηλεκτρονικό Ταχυδροµείο. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

Δίκτυα Υπολογιστών. Το επίπεδο εφαρμογής (application layer) Κ. Βασιλάκης

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

S, (5, -3, 34, -23, 7) ( *, _

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Δίκτυα Υπολογιστών. Το επίπεδο εφαρμογής (application layer) Κ. Βασιλάκης

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. α. Πριν εμφανιστεί η τεχνολογία ISDN οι υπηρεσίες φωνής, εικόνας και δεδομένων απαιτούσαν διαφορετικά δίκτυα.

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Μάθημα 4: Πρότυπα, Πρωτόκολλα & Υπηρεσίες

Αντικειμενοστρεφής Προγραμματισμός

ΕΠΑΝΑΛΗΠΤΙΚΟ ΤΕΣΤ ΣΤΙΣ ΕΝΟΤΗΤΕΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 6ο ίκτυα υπολογιστών

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

α. Το μέγιστο μήκος δεδομένων του ωφέλιμου φορτίου του πλαισίου Ethernet είναι 1500 οκτάδες. ΣΩΣΤΟ

a. b. c. d ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

10.1 Γενικά για τα streams

Κλάσεις και Αντικείµενα

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Γενικά (για τις γραπτές εξετάσεις)

Τι είναι το πρωτόκολλο Διαδικτύου (Internet Protocol, IP);

2.1 Αντικειµενοστρεφής προγραµµατισµός

7.7 Πρωτόκολλο ARP. 1. Το πρωτόκολλο ARP μετατρέπει τις διευθύνσεις IP στις αντίστοιχες φυσικές. Σ Λ

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Οδηγίες αξιοποίησης για τον Εκπαιδευτικό

Ορισμός : URL είναι ένα ακρωνύμιο για το Uniform Resource Locator και το οποίο αποτελεί μια αναφορά ( μια διεύθυνση ) στο Internet.

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Transcript:

14. Δικτύωση με Java Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να δημιουργείτε έναν ελάχιστο εξυπηρέτη TCP/IP σε Java Να δημιουργείτε έναν ελάχιστο εξυπηρετούμενο TCP/IP σε Java Να κατανοείτε πώς υλοποιούνται στη Java τα UDP sockets 14.1 Δικτύωση με Java 14.1.1. Sockets Τα sockets είναι το όνομα που δίνεται, σε ένα συγκεκριμένο προγραμματιστικό μοντέλο, στα τελικά άκρα των συνδέσεων επικοινωνίας ανάμεσα στις διεργασίες. Εξ αιτίας της δημοτικότητας του συγκεκριμένου προγραμματιστικού μοντέλου το όνομα επαναχρησιμοποιήθηκε και σε άλλες περιοχές, συμπεριλαμβανομένης και της Java. Όταν οι διεργασίες επικοινωνούν πάνω από ένα δίκτυο, η Java χρησιμοποιεί και πάλι το μοντέλο ρευμάτων της (stream model). Στην περίπτωση αυτή, ένα socket κατέχει δύο ρεύματα, ένα ρεύμα εισόδου και ένα ρεύμα εξόδου. Μία διεργασία στέλνει τα δεδομένα της σε μία άλλη διεργασία μέσω του δικτύου γράφοντας απλά στο ρεύμα εξόδου που σχετίζεται με το socket. Η διεργασία διαβάζει δεδομένα που γράφονται από τη διεργασία στο «άλλο άκρο» της σύνδεσης διαβάζοντας απλά από το ρεύμα εισόδου που σχετίζεται με το socket. Από τη στιγμή που έχει δημιουργηθεί η δικτυακή σύνδεση, η χρήση των ρευμάτων που σχετίζεται με αυτή τη σύνδεση δεν είναι ιδιαίτερα διαφορετική από τη χρήση οποιουδήποτε άλλου ρεύματος. 14.1.2. Δημιουργία της σύνδεσης Για να δημιουργήσουμε τη σύνδεση, ο ένας υπολογιστής θα πρέπει να εκτελεί ένα πρόγραμμα που αναμένει τη σύνδεση, ενώ το άλλο άκρο θα πρέπει να προσπαθήσει να «φτάσει» το πρώτο. Αυτό μοιάζει με το τηλεφωνικό δίκτυο, όπου ο ένας πρέπει να καλέσει για να μπορέσει ο άλλος να απαντήσει στο τηλέφωνο όταν γίνει η κλήση. 14.1.3. Διευθυνσιοδότηση της σύνδεσης Όταν κάνετε μία τηλεφωνική κλήση χρειάζεται να γνωρίζετε τον αριθμό του τηλεφώνου που θα πάρετε. Όταν κάνετε μία δικτυακή σύνδεση, πρέπει να γνωρίζετε τη διεύθυνση ή το όνομα του απομακρυσμένου υπολογιστή. Επιπρόσθετα, μία δικτυακή σύνδεση απαιτεί έναν αριθμό θύρας (port number), τον οποίο μπορείτε να φανταστείτε σαν το εσωτερικό τηλέφωνο. Από τη στιγμή που έχετε συνδεθεί στο σωστό υπολογιστή, μπορεί να χρειαστεί να καθορίσετε το λόγο της συγκεκριμένης σύνδεσης. Συνεπώς με το σκεπτικό που ζητάτε ένα συγκεκριμένο εσωτερικό για να μιλήσετε π.χ. με το λογιστήριο, μπορεί να χρειάζεται να μιλήσετε με μία συγκεκριμένη θύρα για να επικοινωνήσετε με το λογιστικό πρόγραμμα. 1

14.1.4. Αριθμοί θυρών Οι αριθμοί θυρών στα συστήματα TCP/IP είναι αριθμοί των 16 bits, συνεπώς είναι στο εύρος 0 65535. Στην πράξη, οι αριθμοί θυρών κάτω από το 1024 είναι δεσμευμένοι για προκαθορισμένες υπηρεσίες, και δε θα πρέπει να τους χρησιμοποιείτε παρά μόνο αν θέλετε να επικοινωνήσετε με κάποια από αυτές τις υπηρεσίες (όπως το telnet, το SMTP mail, το ftp κ.ο.κ.). Πρέπει να συμφωνήσετε σχετικά, εκ των προτέρων, ανάμεσα στα δύο προγράμματα, τον εξυπηρετούμενο (client) που ξεκινάει τη σύνδεση και τον εξυπηρέτη (server) που «αναμένει το τηλεφώνημα». Αν οι αριθμοί των θυρών που χρησιμοποιούνται από τα δύο μέρη του συστήματος δε συμφωνούν δε θα συμβεί ποτέ η επικοινωνία. 14.1.5. Το μοντέλο δικτύωσης της Java Στη Java οι socket συνδέσεις TCP/IP υλοποιούνται με κλάσεις από το πακέτο java.net. Πιο κάτω υπάρχει ένα διάγραμμα του τι συμβαίνει στην πλευρά του εξυπηρέτη και τι στην πλευρά του εξυπηρετούμενου. Ο εξυπηρέτης αναθέτει έναν αριθμό θύρας. Όταν ο εξυπηρετούμενος αιτείται μία σύνδεση, ο εξυπηρέτης ανοίγει τη σύνδεση socket με τη μέθοδο accept(). Ο εξυπηρετούμενος εγκαθιδρύει μία σύνδεση με το host στη θύρα port #. Τόσο ο εξυπηρετούμενος όσο και ο εξυπηρέτης επικοινωνούν χρησιμοποιώντας ένα InputStream και ένα OutputStream. Ο κώδικας για να υλοποιήσετε αυτού του είδους την επικοινωνία παρουσιάζεται στις επόμενες σελίδες. 14.2 Ελάχιστος εξυπηρέτης TCP/IP Οι εφαρμογές εξυπηρέτη TCP/IP βασίζονται στις κλάσεις δικτύωσης ServerSocket και Socket που παρέχονται από τη γλώσσα Java. Η κλάση ServerSocket αναλαμβάνει το μεγαλύτερο μέρος της δουλειάς για την εγκαθίδρυση ενός εξυπηρέτη. 2

import java.net.*; import java.io.*; public class SimpleServer { public static void main(string args[]) { ServerSocket s = null; Socket s1; String sendingstring = Hello Net World! ; int slength = sendstring.length(); OutputStream = s1out; DataOutputStream = dos; // Εγγραφή της υπηρεσίας στη θύρα 5432 try { s = new ServerSocket(5432); catch (IOException e) { // εκτελείται για πάντα ο βρόχος listen/accept while (true) { try { // Αναμονή και «ακούει» για σύνδεση s1 = s.accept(); // Παίρνει το ρεύμα επικοινωνίας που σχετίζεται // με το socket s1out = s1.getoutputstream(); dos = new DataOutputStream(s1out); // Στείλτε τη συμβολοσειρά σας dos.writeutf(sendstring); // Κλείσε τη σύνδεση, αλλά όχι και το // socket του εξυπηρέτη dos.close(); s1out.close(); s1.close(); catch (IOException e) { 14.3 Ελάχιστος εξυπηρετούμενος TCP/IP Η πλευρά του εξυπηρετούμενου σε μία εφαρμογή TCP/IP βασίζεται στην κλάση Socket. Και πάλι, μεγάλο μέρος της δουλειάς που έχει να κάνει με την εγκαθίδρυση της σύνδεσης το αναλαμβάνει η κλάση Socket. Αυτός ο εξυπηρετούμενος συνδέεται στον εξυπηρέτη που μόλις περιγράψαμε και παρουσιάζει ό,τι του στέλνει ο εξυπηρέτης στο stdout. 3

import java.net.*; import java.io.*; public class SimpleClient { public static void main(string args[]) throws IOException { int c; Socket s1; InputStream s1in; DataInputStream dis; // Ανοίγει τη σύνδεση στον υπολογιστή sunbert, θύρα 5432 s1 = new Socket( sunbert, 5432); // Λαμβάνει ένα χειριστήριο αρχείου εισόδου // (input file handle) από το socket και // διαβάζει την είσοδο s1in = s1.getinputstream(); dis = new DataInputStream(s1In); String st = new String(dis.readUTF()); System.out.println(st); // Όταν τελειώσει απλά κλείνει τη σύνδεση και φεύγει dis.close(); s1in.close(); s1.close(); 14.4 UDP Sockets Ενώ το TCP/IP είναι ένα πρωτόκολλο που βασίζεται στη σύνδεση (connection-oriented), το User Datagram Protocol (UDP) είναι ένα πρωτόκολλο χωρίς σύνδεση (connectionless). Ένας απλός και κομψός τρόπος για να σκεφτούμε τις διαφορές ανάμεσα σε αυτά τα δύο πρωτόκολλα είναι η διαφορά ανάμεσα σε μία τηλεφωνική κλήση και στο ταχυδρομείο. Οι τηλεφωνικές κλήσεις εγγυώνται ότι έχουμε σύγχρονη επικοινωνία τα μηνύματα αποστέλλονται και λαμβάνονται με τη σειρά που πρέπει. Μία επικοινωνία με κάρτες που στέλνονται μέσω ταχυδρομείου δεν είναι εγγυημένη τα μηνύματα μπορεί να ληφθούν μπερδεμένα (εκτός σειράς), αν ληφθούν. Το User Datagram Protocol υποστηρίζεται μέσω δύο κλάσεων της Java, DatagramSocket και DatagramPacket. Το πακέτο (packet) είναι ένα πλήρες μήνυμα που περιέχει πληροφορία σχετικά με τον αποστολέα, το μήκος του μηνύματος και το ίδιο το μήνυμα. 4

14.4.1. DatagramPacket Το DatagramPacket έχει δύο συναρτήσεις δημιουργίας μία για να λαμβάνει δεδομένα και μία για να στέλνει: DatagramPacket(byte [] recvbuf, int readlength) χρησιμοποιείται για να φτιάξει ένα πίνακα από bytes ώστε να λαμβάνει ένα πακέτο UDP. Ο πίνακας των bytes είναι κενός όταν μεταβιβάζεται στη συνάρτηση δημιουργίας και η μεταβλητή int τίθεται στο πλήθος των bytes που πρέπει να διαβαστούν (και δεν είναι μεγαλύτερη από το μήκος του πίνακα). DatagramPacket(byte [] sendbuf, int sendlength, InetAddress iaddr, int iport) χρησιμοποιείται για να προετοιμάσει ένα πακέτο UDP για μετάδοση. Το sendlength δεν είναι μεγαλύτερο από το μήκος του πίνακα bytes sendbuf. 14.4.2. DatagramSocket Το DatagramSocket χρησιμοποιείται για να διαβάζουμε και να γράφουμε πακέτα UDP. Η κλάση έχει τρεις συναρτήσεις δημιουργίας που σας επιτρέπουν να καθορίζετε σε ποια θύρα και διεύθυνση διαδικτύου (internet address) για σύνδεση: DatagramSocket() σύνδεση σε οποιαδήποτε διαθέσιμα θύρα στον τοπικό υπολογιστή. DatagramSocket(int port) σύνδεση στη συγκεκριμένη θύρα στον τοπικό υπολογιστή. DatagramSocket(int port, InetAddress iaddr) σύνδεση στη συγκεκριμένη θύρα στη συγκεκριμένη διεύθυνση. 14.5 Ασκήσεις 14.5.1. Επίπεδο 1: Χρήση sockets Δουλεύετε σε ομάδες ώστε να μπορείτε να χρησιμοποιήσετε ένα όνομα υπολογιστή διαφορετικό από το δικό σας. Σκοπός του εργαστηρίου είναι να δημιουργήσετε ένα ζευγάρι εξυπηρέτη και εξυπηρετούμενου ένα πρόγραμμα θα αιτείται ένα αρχείο από ένα άλλο. 1. Το πρότυπο για τον εξυπηρέτη (FileServer.java) βρίσκεται στον κατάλογο templates. Αναπτύξτε τις μεθόδους που θα επιτρέψουν στον εξυπηρέτη να λαμβάνει από τον εξυπηρετούμενο μία συμβολοσειρά που θα είναι το όνομα του αρχείου και να προσπαθεί να το ανοίξει και μετά να το μεταφέρει στον εξυπηρετούμενο μέσω του socket. 2. Το πρότυπο για τον εξυπηρετούμενο (FileClient.java) βρίσκεται επίσης στον κατάλογο templates. Το πρόγραμμα εξυπηρετούμενου δέχεται ως όρισμα μία συμβολοσειρά που είναι το όνομα του αρχείου και το στέλνει στον εξυπηρέτη, στη συνέχεια περιμένει από τον εξυπηρέτη είτε να στείλει μία απάντηση λάθους ή το ίδιο το αρχείο. 5

14.5.2. Επίπεδο 3: Εξυπηρέτης με πολλά νήματα 1. Επεκτείνετε τον κώδικα για να επιτρέπετε ο εξυπηρετούμενος να ζητάει πολλά αρχεία 2. Επεκτείνετε τον κώδικα για να αποθηκεύσετε το αρχείο στο δίσκο αν δεν επιστραφεί σφάλμα. 3. Επεκτείνετε τον εξυπηρέτη για τη χρήση νημάτων ώστε να μπορούν να συνδεθούν πολλοί εξυπηρετούμενοι ταυτόχρονα. 6