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

Σχετικά έγγραφα
Εργαστήριο Δικτύων Υπολογιστών

Δικτυακός προγραμματισμός

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

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

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

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

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Υποδοχείς (Sockets) Προγραμματισμός II 1

4 η ιάλεξη: Signals UDP Sockets

Δικτυακός Προγραμματισμός (Sockets Programming) Εργαστήριο Γ Εξάμηνο, Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας

Ζητήματα Σχεδίασης Λογισμικού Πελάτη

Επικοινωνία Client/Server Υποδοχές

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

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

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

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

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή

Topic 5: Sockets. *Ευχαριστίες στους Jim Kurose, Keith Ross, Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη

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

Εργαστήριο Δικτύων Υπολογιστών

Socket Application Programming Interface

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

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

Κ. Στάµος Μηχανικός Η/Υ και Πληροφορικής, Πανεπιστήµιο Πατρών Μηχανικός Έρευνας και Ανάπτυξης, ΕΜ6/ΕΑΙΤΥ

HY-335a Project: microtcp *, μία lightweight TCP βιβλιοθήκη

{ int pipe(int fd[ ]) close

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

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

Δίκτυα Επικοινωνιών ΙΙ: Πληροφορίες σχετικά με το μάθημα

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

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

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

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

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

ΑΤΜ PROJECT ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Άννα Τριανταφύλλου ΑΕΜ : 456. επιβλέπων καθηγητής: Μηνάς Δασυγένης

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

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

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

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

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

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

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

Πρωτόκολλα Διαδικτύου. Άγγελος Ρούσκας Τμήμα Ψηφιακών Συστημάτων Πανεπιστήμιο Πειραιώς

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

Άσκηση 2 η Πρωτόκολλο επικοινωνίας TCP/IP

Βασικά Θέματα Επικοινωνίας. Κατανεμημένα Συστήματα 1

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Δίκτυα Επικοινωνιών ΙΙ: Network Programming Εισαγωγή, TCP, UDP, Ports

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών Δίκτυα υπολογιστών. (και το Διαδίκτυο)

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

2η Προγραµµατιστική Εργασία

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

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

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

Α5.1 Εισαγωγή στα Δίκτυα. Α Λυκείου

Εισαγωγή στο TCP/IP. Π. Γαλάτης

Επίπεδο δικτύου IP διευθυνσιοδότηση

Επικοινωνία Διεργασιών στο Internet με POSIX Sockets

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

Πρωτόκολλα Επικοινωνίας και Τείχος Προστασίας

Προγραµµατισµός ικτύων Ε-01

ίκτυα - Internet Υπηρεσίες Internet O Παγκόσµιος Ιστός (World Wide Web) Ηλεκτρονική Αλληλογραφία ( ) Υπηρεσία FTP (File Transfer Protocol)

Πρωτόκολλο FTP. Από τα παλαιότερα πρωτόκολλα του ArpaNet Το FTP είναι μια τυποποίηση του TCP/IP Πρόκειται για πρωτόκολο γενικού σκοπού

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

Τεχνολογίες ιαδικτύου

Δίκτυα Υπολογιστών ΙΙ (Ασκήσεις Πράξης)

ίκτυα υπολογιστών Στόχοι κεφαλαίου ίκτυα

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

ΔΙΑΓΩΝΙΣΜΑ ΤΕΛΙΚΗΣ ΕΠΑΝΑΛΗΨΗΣ ΣΤΙΣ ΕΝΟΤΗΤΕΣ

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Ιόνιο Πανεπιστήµιο Τµήµα Αρχειονοµίας - Βιβλιοθηκονοµίας. Υπηρεσίες Internet. ίκτυα Η/Υ. Επίπεδο Εφαρµογής. Ενότητα θ

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Προγραµµατισµός ικτύων Ε-01

Τεχνολογίες Παγκόσμιου Ιστού. 1η διάλεξη

Τι είναι ένα δίκτυο υπολογιστών; Αρχιτεκτονική επιπέδων πρωτοκόλλων. Δικτυακά πρωτόκολλα

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

ΚΕΦΑΛΑΙΟ 10. Δικτυακός προγραμματισμός Εισαγωγή

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Βασικές Υπηρεσίες Διαδικτύου. Επικοινωνίες Δεδομένων Μάθημα 2 ο

Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών: Υπηρεσία Ηλεκτρονικού Ταχυδρομείου - SMTP

ΣΥΣΤΗΜΑΤΑ SCADA. Μέρος 5. Δικτύωση για Απομακρυσμένο Έλεγχο και Μεταφορά Δεδομένων

6.2 Υπηρεσίες Διαδικτύου

Δίκτυα Η/Υ στην Επιχείρηση

Διαδίκτυα και το Διαδίκτυο (Internetworking and the Internet)

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Δίκτυα Η/Υ ςτην Επιχείρηςη

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων. ίκτυα Υπολογιστών Ι. To Μοντέλο OSI. Αναπλ. Καθηγ. Π. εμέστιχας

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

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

ΤΕΙ ΗΠΕΙΡΟΥ. ΜΑΘΗΜΑ: Πρωτόκολλα Επικοινωνίας ιαδικτύου. Εξάµηνο: 3ον. Κεφάλαιο 8 ον : ΕπίπεδοΕφαρµογής (Application Layer) Στεργίου Ελευθέριος

ΕΠΛ 012. Δίκτυα Τπολογιστών & Διαδίκτυο

ΤΕΙ ΗΠΕΙΡΟΥ. ΜΑΘΗΜΑ: Πρωτόκολλα Επικοινωνίας ιαδικτύου. Εξάµηνο: 3ον. Στεργίου Ελευθέριος

Transcript:

Δίκτυα Επικοινωνιών ΙΙ: Network Programming TCP Sockets Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1

Δικτυακός Προγραμματισμός Βασικές Έννοιες: IP addresses, ports Sockets Γνωστές client/server εφαρμογές http - World Wide Web (WWW), web client/server FTP e-mail Real audio, real video Peer-to-peer εφαρμογές (p2p) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 2 2

Sockets in Unix Socket API (Application Programming Interface) Εμφανίστηκε στο BSD4.1 UNIX, (1981) Έχει υιοθετηθεί από όλες τις παραλλαγές του Unix - Linux, και έχει μεταφερθεί και σε άλλα Λ.Σ. Σκοπος του Socket API είναι η γενική επικοινωνία μεταξύ διεργασιών (που τρέχουν στον ίδιο ή σε διαφορετικούς υπολογιστές) ΟμηχανισμόςτωνSockets αποτελεί σήμερα τo δημοφιλέστερoapi προγραμματισμού και χρήσης των πρωτοκόλλων TCP/IP socket Μια διεπαφή: τοπική, δημιουργημένη απο μια διεργασία και ελεγχόμενη απο το λειτουργικό σύστημα. Μια πόρτα μέσω της οποίας μια διεργασία μπορεί να στείλει και να δεχτεί μηνύματα σε/από κάποια άλλη διεργασία Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 3 3

Sockets, IP Αddresses και Ports Η διεργασία που δημιουργεί το Socket το χειρίζεται μέσω ενός θετικού ακεραίου socket descriptor (όπως ένα file descriptor) Άλλες διεργασίες χρειάζονται κάποια «διεύθυνση»-«όνομα»: Το πεδίο από όπου λαμβάνει το «όνομα» το socket αποτελεί το Domain ή Address family: Unix Domain (AF_UNIX) (δεν θα το χρησιμοποιήσουμε) Internet Domain (AF_INET) Κάθε socket στο Internet Domain ταυτοποιείται από την δυάδα: IP Address του υπολογιστή Port number - θύρα επικοινωνίας Κάθε κανάλι επικοινωνίας από άκρη-σε-άκρη (end-to-end connection) ταυτοποιείται μονοσήμαντα με την πεντάδα: { Protocol / IP address1 / Port1/ IP address2 / Port2 } Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 4 4

Sockets, IP addresses and Ports (Client/Server Example) Client socket IP address 1 = 150.140.141.135 agreed port 2 (e.g. 5000) any port 1 message other ports Server socket IP address 2 = 150.140.141.134 Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 5 5

Stream / Datagram Communications Η μετάδοση δεδομένων πάνω σε ένα κανάλι μπορεί να γίνει με 2 τρόπους: Connection Oriented - Stream Communication (SOCK_STREAM) Εγκατάσταση «κυκλώματος» Το πρωτόκολλο επικοινωνίας είναι το TCP (παρέχει έλεγχο λαθών και επαναμεταδίδει τα χαμένα πακέτα) Χρησιμοποιείται συνήθως σε εφαρμογές με καθορισμένη σχέση Client Server Connectionless - Datagram Communication (SOCK_DGRAM) Tο κανάλι δημιουργείται για κάθε μήνυμα ξεχωριστά Το πρωτόκολλο επικοινωνίας είναι το UDP (Η παραλαβή των πακέτων δεν είναι εγγυημένη. Ο έλεγχος μετάδοσης, και τα fragmentation/reassembly των δεδομένων γίνονται στο επίπεδο εφαρμογής) Χρησιμοποιείται συνήθως σε εφαρμογές που απαιτούν υψηλές ταχύτητες μετάδοσης με μικρά αυτόνομα πακέτα, χωρίς εγγυημένη αξιοπιστία Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 6 6

TCP Client/Server interaction (Stream Communication) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 7 7

TCP Sockets - Πρωτογενείς κλήσεις Server create endpoint (socket()) bind address (bind ()) specify queue (listen()) /* Optional */ wait for connection (accept()) transfer data (read() - write()) Client create endpoint (socket()) connect to server (connect()) transfer data (read() - write()) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 8 8

Πρωτογενείς κλήσεις για τα sockets Οι οδηγίες (#include) που χρησιμοποιούνται για αυτές τις κλήσεις είναι οι : #include <sys/types.h> #include <sys/socket.h> Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 9 9

Ηκλήση socket Αρχικοποίηση ενός socket Σύνταξη int socket (int family, int type, int protocol) Επιστρέφει ένα ακέραιο ανάλογο με αυτό που επιστρέφουν οι ρουτίνες διαχείρισης αρχείων (fd) sockfd Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 10 10

Ηκλήση socket Example: int sockfd; sockfd = socket (AF_INET, SOCK_STREAM, 0); Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 11 11

Ηκλήση bind Ονομασία του Socket Στηναρχικήφάσητοsocket δεν έχει διεύθυνση Σύνταξη: int bind (int sockfd, struct sockaddr * myaddr, int addrlen) Συνδέει το sockfd που έχει επιστραφεί από την κλήση socket(), με μία τοπική διεύθυνση και θύρα (IP address, port number), γνωστοποιώντας στο σύστημα ότι τα μηνύματα που έρχονται στα συγκεκριμένα: (interface port) απευθύνονται στη συγκεκριμένη διαδικασία. Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 12 12

Socket Address Structures int bind (int sockfd, struct sockaddr * myaddr, int addrlen) Σκοπός των δομών Socket Address είναι να χρησιμοποιούνται από τις συναρτήσεις του socket API Είναι δομές που ξεκινούν με το χαρακτηριστικό sockaddr_ το οποίο παίρνει κατάληξη ανάλογα με το πρωτόκολλο δικτύου. IPv4: sockaddr_in <netinet/in.h> IPv6: sockaddr_in6 Υπάρχουν βοηθητικές συναρτήσεις για την μετατροπή σε sockaddr_ δομές π.χ. inet_addr, inet_ntoa, inet_pton, inet_ntop Generic sockaddr_ Structure #include <sys/socket.h> struct sockaddr { }; uint8_t sa_len; sa_family_t sa_family; char sa_data [14]; Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 13 13

Σύγκριση Socket Address Structures IPv4 Στο IPv4 (sockaddr_in), τα πεδία που μας ενδιαφέρουν είναι τα sin_family: ίδιο με τo Address family στην δημιουργία του socket (AF_INET) sin_port: καθορίζει το port number Δεν πρέπει να χρησιμοποιείται από κάποιο άλλο socket. Αριθμοί από 1 εώς 1023 είναι δεμευμένοι για τις υπερεσίες του συστήματος. Συνήθως χρησιμοποιούνται αριθμοί πάνω από 5000. sin_addr: μιά IP διέυθυνση του υπολογιστή (e.g. 150.140.141.134) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 14 14

Server example (so far) Example: int sockfd; sockfd = socket (AF_INET, SOCK_STREAM, 0); struct sockaddr_in sin; sin.sin_family = AF_INET; /* socket address structure*/ sin.sin_port = htons(5000); /* agreed port*/ sin.sin_addr.s_addr = htonl(inaddr_any); /* accept connections to all computer interfaces */ bind (sockfd, &sin, sizeof (sin) ); Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 15 15

Ηκλήση listen (Προαιρετική) Σύνταξη: int listen (int sockfd, int backlog) Χρησιμοποιείται από ένα connection-oriented εξυπηρετητή για να ενημερωθεί το σύστημα ότι ο (εξυπηρετητής) είναι έτοιμος να λάβει μηνύματα στο socket με descriptor το sockfd Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 16 16

Ηκλήση connect Σύνταξη: int connect (int sockfd_cl, struct sockaddr * servaddr, int addrlen) Συνδέει τον descriptor sockfd_cl που έχει επιστραφεί με την κλήση socket() στον client, με μία IP address και έναν αριθμό θύρας (port) του server (μπορεί να βρίσκεται στο ίδιο ή σε κάποιο άλλο μηχάνημα) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 17 17

Client Example (so far) int sockfd_cl; sockfd_cl = socket (AF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = 5000; /* agreed port*/ server_addr.sin_addr.s_addr = inet_addr("150.140.141.134"); /* server IP address */ connect (sockfd_cl, server_addr, sizeof(server_addr) ); Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 18 18

Ηκλήση connect Τα TCP sockets αρχικοποιούνται με «three-way handshaking» Γίνονται αυτόματα από το Socket API Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 19 19

Ηκλήση accept Σύνταξη: int accept (sockfd, struct sockaddr *peer_sockaddr, int * addrlen) Με την κλήση αυτή γίνεται αποδοχή κάποιας αίτησης σύνδεσης που περιμένει στην ουρά του sockfd Αν η ουρά είναι άδεια, η διεργασία μπλοκάρει μέχρι να εμφανιστεί κάποια αίτηση Μολις γίνει αποδοχή, η παράμετρος peer_sockaddr επιστρέφει πληροφορίες (port, IP address) για τον client Επιστρέφεται ένας νέος socket descriptor (new_sockfd), οοποίοςαποτελείτο άκρο ενός καινούργιου καναλιού (client server channel) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 20 20

Ηκλήση accept new_sockfd = accept (sockfd, &peer_sockaddr, addrlen) Client sockfd_cl port 1 2 agreed port 2 connect 3 Server sockfd 1 accept -blocked- Δημιουργείτε new_sockfd Ή δομη peer_sockaddr περιέχει τα IP 1, port 1 Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 21 IP address 1 IP address 2 21

Ηκλήση accept Απο την στιγμή που η accept() επιστρέφει το νέο socket, το κανάλι επικοινωνίας με τον client έχει εγκατασταθεί Μέχρι να ξανακληθεί η accept(), o server δεν μπορεί να δεχτεί άλλες κλήσεις για σύνδεση. Οι κλήσεις που γίνονται όσο ο server βρίσκεται εκτός της accept() τοποθετούνται σε μια ουρά (default size 5 μπορεί να αλλάξει με την κλήση listen()) Ο συνήθης τρόπος επεξεργασίας της αίτησης από τον server είναι με fork() Με την fork() ο client επικοινωνεί με έναν «αφοσιωμένο» αντίγραφο του server, ενώ ο «αρχικός»server μπορεί να δέχεται νέες κλήσεις σύνδεσης (επιστρέφει στην accept() ) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 22 22

... Server example (so far) int sockfd; sockfd = socket (AF_INET, SOCK_STREAM, 0); struct sockaddr_in sin; sin.sin_family sin.sin_port = htons(5000); = AF_INET; /* agreed port*/ sin.sin_addr.s_addr = htonl(inaddr_any); /* accept connections to all computer interfaces */ bind (sockfd, &sin, sizeof (sin) ); listen(sockfd, LISTENQ); /* Optional */ Struct sockaddr_in peer_sockaddr; /* client socket address structure*/ int new_sockfd; /* new socket id */ new_sockfd = accept (sockfd, &peer_sockaddr, sizeof (peer_sockaddr) ); Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 23 23

Ηκλήση fork Σύνταξη: #include <unistd.h> int pid_t fork(); Επιστρέφει 0 στο «παιδί» Το «παιδί» μπορεί να βρει τον «πατέρα» του καλώντας την getppid() Ο «πατέρας» μπορεί να έχει πολλά παιδιά Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 24 24

... Server example (so far) int sockfd; sockfd = socket (AF_INET, SOCK_STREAM, 0); struct sockaddr_in sin; sin.sin_family= AF_INET; sin.sin_port = htons(5000); /* agreed port*/ sin.sin_addr.s_addr= htonl(inaddr_any); bind (sockfd, &sin, sizeof (sin) ); listen(sockfd, LISTENQ); for ( ; ; ;) { } Struct sockaddr_in peer_sockaddr; /* accept connections to all computer interfaces */ /* client socket address structure*/ int new_sockfd; /* new socket id */ new_sockfd = accept (sockfd, &peer_sockaddr, sizeof (peer_sockaddr) ); int childid; if ( (childid = fork() ) == 0 ) { /* child process */ }.... /* devoted server */ /* use new_sockfd */ /* main-parent server continue*/ Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 25 25

Ηκλήση close Σύνταξη: int close (int sockfd) Κλείνει το socket που είχε δημιουργηθεί με την αντίστοιχη κλήση socket() Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 26 26

Επικοινωνία, Είσοδος και Έξοδος Ο socket descriptor έχει την ίδια λειτουργικότητα με έναν file descriptor Μπορούν να χρησιμοποιηθούν read() και write() Όμως τα read/write μπορεί να μην γράψουν/διαβάσουν όσους χαρακτήρες τους ζητηθούν Γιατολόγοαυτό, οι κλήσεις read/write πρέπει να «επιμένουν» Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 27 27

Συναρτήσεις readn, writen, readline Υπάρχουν ειδικές συναρτήσεις που «επιμένουν» ωστε να γραφτούν και να διαβαστούν όσοι χαρακτήρες τους ζητηθούν Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 28 28

readn Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 29 29

writen Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 30 30

readline Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 31 31

Μετατροπή διευθύνσεων? Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 32 32

Summary of Address Conversion Functions Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 33 33

Πως κάνουμε resolve ένα όνομα? Δεν μπορούμε να θυμόμαστε την IP address του server Χρησιμοποιούμε name aliases (e.g diogenis.ceid.upatras.gr) και την κλήση gethostbyname Αντίστροφα: gethostbyaddr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 34 34

hostent structure Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 35 35

Πως βρίσκουμε το port μιας υπηρεσίας? Δεν μπορούμε να θυμόμαστε τα port numbers της υπηρεσίας Χρησιμοποιούμε το όνομα (e.g FTP) και την κλήση getservbyname Αντίστροφα: getservbyport Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 36 36

Ένας απλός Server Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 37 37

Ένας απλός Server Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 38 38

Ένας απλός Client Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 39 39

Ένας απλός Client Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 40 40

Χρήση wrapper error control Συναρτήσεων Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 41 41

Παρατηρήσεις Χρήση bzero για αρχικοποίηση Το parent process καλεί την close για το confd socket και το child process καλεί την close για το listenfd socket, γιατί? Η close μειώνει το reference στο socket κατά ένα και κλείνει το socket όταν το reference γίνει 0. Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 42 42

Σχετικό Υλικό R.W. Stevens, UNIX Network Programming (2nd edition) Βασιζόμαστε στο κώδικα: http://www.kohala.com/start/unpv12e/unpv12e.tar.gz Καλό tutorial: http://beej.us/guide/bgnet/ Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 43 43