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

Σχετικά έγγραφα
Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ιαφάνειες παρουσίασης #6 (β)

Δομημένος Προγραμματισμός

Διάλεξη 18η: Διαχείρηση Αρχείων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Η/Υ (ΤΛ2007 )

C: Από τη Θεωρία στην Εφαρμογή

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

Προγραμματισμός Ι (ΗΥ120)

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

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Επεξεργασία Αρχείων Κειµένου

Ανάπτυξη και Σχεδίαση Λογισμικού

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 8η: Αλφαριθμητικά (strings)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

scanf() scanf() stdin scanf() printf() int float double %lf float

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Μεθόδων Επίλυσης Προβλημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

Η γλώσσα προγραμματισμού C

Συμβολοσειρές Ορίσματα στη main()

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006)

Η γλώσσα προγραμματισμού C

Προγραμματισμό για ΗΜΥ

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

Διαδικασιακός Προγραμματισμός

Δομημένος Προγραμματισμός

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Δομημένος Προγραμματισμός (ΤΛ1006)

Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Εργαστήριο 9: Αρχεία

Προγραμματισμός Ι (ΗΥ120)

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Μεθόδων Επίλυσης Προβλημάτων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

Διαδικασιακός Προγραμματισμός

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Διάλεξη 11η: Δείκτες, μέρος 1

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

Διαδικασιακός Προγραμματισμός

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Transcript:

Socket *sopen(const int type, const int protocol, const char *host, const char *service) Στην περίπτωση ενός client, δημιουργεί μια νέα σύνδεση και κατασκευάζει μια δομή Socket που σχετίζεται με αυτή Σε έναν server κατασκευάζει αυτό που ονομάζεται listening socket δηλαδή ένα socket που περιμένει συνδέσεις από άλλους. type protocol host service Καθορίζει αν πρόκειται για εξυπηρετούμενο (client) ή εξυπηρέτη (server) και μπορεί να πάρει τις τιμές: TYPE_CLIENT ή TYPE_SERVER Καθορίζει το πρωτόκολλο και μπορεί να πάρει τις τιμές: PROTO_TCP_IP PROTO_UDP_IP PROTO_TCP_IPV4 PROTO_UDP_IPV4 PROTO_TCP_IPV6 PROTO_UDP_IPV6 PROTO_ANY_IP PROTO_STREAM_UNIX PROTO_DGRAM_UNIX Όπου δεν ορίζονται ρητά τα IPv4 ή IPv6 γίνεται χρήση αυτού που είναι διαθέσιμο. Η τιμή PROTO_ANY_IP δηλώνει οποιοδήποτε πρωτόκολλο διαδικτύου υποστηρίζεται από τον host που θέλουμε να επικοινωνήσουμε και χρησιμοποιείται μόνο από τους client. Στην περίπτωση ενός client, περιέχει την ονομασία ή την διεύθυνση του server που θέλουμε να συνδεθούμε, για παράδειγμα: www.google.com ή 209.85.148.99 ή 5f1b:df00:ce3e:e200:20:800:2b37:6426 (:διεύθυνση IPv6) ή /tmp/server (:unix domain). Σε έναν server η παράμετρος αυτή αγνοείται. Φανερώνει την υπηρεσία ή την πόρτα που θέλουμε να συνδεθούμε πχ: ftp ή 21 Έναν δείκτη σε ένα νέο αντικείμενο τύπου Socket το οποίο χρησιμοποιείται σαν παράμετρος στις υπόλοιπες συναρτήσεις ή NULL δεν μπορεί να δεσμευτεί μνήμη για την κατασκευή ενός Socket

int sclose(socket *sock) Τερματίζει μια σύνδεση και απελευθερώνει την μνήμη που έχει δεσμευτεί. 0 αν είναι επιτυχής ή EOF αν συμβεί κάποιο λάθος Socket *sock; sock=sopen(type_client, PROTO_TCP_IP, "127.0.0.1", "9877"); /* * use Socket... */ sclose(sock);

size_t sread(void *ptr, size_t size, Socket *sock) Διαβάζει δεδομένα από μια σύνδεση και τα τοποθετεί στον πίνακα που δείχνει ο ptr. Καλείται μόνο για Socket τύπου client. ptr Δείκτης στη θέση μνήμης που θα τοποθετηθούν τα δεδομένα προς ανάγνωση. size Το μέγεθος του πίνακα. Τον αριθμό των bytes που έγιναν πραγματικά ανάγνωση ή 0 αν συμβεί κάποιο λάθος. Σε περίπτωση πρωτοκόλλων με σύνδεση, όπως το TCP η επιστροφή 0 σημαίνει ότι ο αντίπερα υπολογιστής έχει τερματίσει την σύνδεση. Η διάκριση ανάμεσα στο λάθος και τον τερματισμό της σύνδεσης γίνεται με την ρουτίνα serror() #define MAX_DATA 1024 Socket *sock; char data[max_data]; size_t n; sock=sopen(type_client, PROTO_TCP_IP, "127.0.0.1", "9877"); n=sread(data, sizeof(data), sock); /* * do something with data */ sclose(sock);

size_t swrite(const void *ptr, size_t size, Socket *sock) Εγγράφει δεδομένα σε μια σύνδεση από τον πίνακα που δείχνει ο ptr. Καλείται μόνο για Socket τύπου client. ptr Δείκτης στη θέση μνήμης που υπάρχουν τα δεδομένα προς εγγραφή. size Το πλήθος των δεδομένων σε byte. 0 αν συμβεί κάποιο λάθος ή τον αριθμό των bytes που έγιναν εγγραφή δηλαδή size. Socket *sock; char data[]= a message ; sock=sopen(type_client, PROTO_TCP_IP, "127.0.0.1", "9877"); swrite(data, sizeof(data), sock);... sclose(sock);

Socket *saccept(socket *sock) Καλείται μόνο από τους servers και κάνει αποδοχή μιας αίτησης για σύνδεση. Σε πρωτόκολλα τύπου stream, όπως το TCP, δημιουργεί μια πραγματική σύνδεση ανάμεσα σε client και server, ενώ σε πρωτόκολλα τύπου datagram, όπως το UDP, απλά κάνει αναμονή μέχρι να φτάσει το πρώτο πακέτο από κάποιον client. sock Δείκτης σε δομή τύπου Socket. Θα πρέπει φυσικά να είναι TYPE_SERVER Έναν δείκτη σε ένα νέο αντικείμενο τύπου Socket το οποίο χρησιμοποιείται σαν παράμετρος στις υπόλοιπες συναρτήσεις ή NULL αν συμβεί κάποιο λάθος. Το νέο Socket είναι TYPE_CLIENT και περιέχει τα στοιχεία (διεύθυνση, πόρτα κτλ) του υπολογιστή που ζήτησε τη σύνδεση. #define MAX_DATA 1024 Socket *srv, *cli; char data[max_data]; size_t n; srv=sopen(type_server, PROTO_TCP_IPV4, NULL, "9877"); while (!<terminate condition> ) { cli=saccept(srv); n=sread(data, sizeof(data), cli); /* * do something with data */ sclose(cli); sclose(srv);

int serror(const Socket *sock) Κάνει έλεγχο αν έχει συμβεί λάθος κατά την εκτέλεση της προηγούμενης συνάρτησης. 0 δεν έχει συμβεί λάθος ή μια μη μηδενική τιμή στην αντίθετη περίπτωση. Στην πραγματικότητα η τιμή αυτή ισούται με την errno της C.

void sclearerr(socket *sock) Καθαρίζει την κατάσταση λαθών ενός Socket Τίποτα

const char *sstrerror(const Socket *sock) ένα μήνυμα που φανερώνει τον τύπο του λάθους που έχει συμβεί σε ένα Socket Ένα αλφαριθμητικό μήνυμα ή κενό εάν δεν υπάρχει κατάσταση λάθους. #include <stdio.h> Socket *sock; char data[]= a message ; sock=sopen(type_client, PROTO_TCP_IP, "127.0.0.1", "9877"); if ( serror(sock) ) { printf( Could not connect: %s\n, sstrerror(sock)); return 1; swrite(data, sizeof(data), sock); if ( serror(sock) ) { printf( Error writing data: %s\n, sstrerror(sock)); return 1;... sclose(sock);

char *sgetaddress(const Socket *sock) την διεύθυνση του αντίπερα υπολογιστή σε μορφή string Ένα αλφαριθμητικό ή κενό αν συμβεί λάθος.

unsigned short sgetport(const Socket *sock) την πόρτα του αντίπερα υπολογιστή σε μια σύνδεση. Ένα νούμερο έως 0xFFFF ή 0 αν συμβεί κάποιο λάθος. #include <stdio.h> Socket *srv, *cli; srv=sopen(type_server, PROTO_TCP_IPV4, NULL, "9877"); while (!<terminate condition> ) { cli=saccept(srv); printf( Connection accepted from: %s, port: %s\n,sgetaddress(cli), sgetport(cli)); /* * serve the client */ sclose(cli); sclose(srv);