Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Ανάπτυξη Δικτύων Καθηγητής: Φουληράς Παναγιώτης

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Ανάπτυξη Δικτύων Καθηγητής: Φουληράς Παναγιώτης"— Μεταγράφημα παρουσίασης:

1 Ανάπτυξη Δικτύων Καθηγητής: Φουληράς Παναγιώτης
Προγραμματισμός Υποδοχών με Socket Programming with Python™ Φοιτητής: Σαμπρή Ογλού Μουράτ (133/05) Πανεπιστήμιο Μακεδονίας – Οικονομικών και Κοινωνικών Επιστημών 27/03/2007

2 Γλώσσα Προγραμματισμού Python™
Γλώσσα υψηλού επιπέδου Αναπτύχθηκε και παρουσιάστηκε, για πρώτη φορά το 1991, από τον Guido van Rossum Είχε ξεκινήσει ως γλώσσα scripting για το λειτουργικό σύστημα Amoeba Βασίστηκε κυρίως στην ABC, αλλά και στις C, Haskell, Icon, Lisp, Modula-3, Perl

3 Είναι... Διερμηνευόμενη (interpreted) Αλληλεπιδραστική (interactive)
Χρησιμοποιεί διερμηνευτή, αντί για μεταγλωττιστή, που την κάνει πιο γρήγορη και ευέλικτη Αλληλεπιδραστική (interactive) Ο διερμηνευτής μπορεί να χρησιμοποιηθεί αλληλεπιδραστικά για δοκιμή ενός μέρους του κώδικα ή για περεταίρω εξερεύνηση της γλώσσας γράφοντας απλές εντολές στη γραμμή εντολών Αντικειμενοστρεφής (object-oriented) Όπως Java ή C++

4 Χρησιμοποιεί... Modules (ενότητες) Classes (τάξεις)
Είναι γραμμένα σε μια γλώσσα που μεταγλωττίζεται Επεκτείνουν τη γλώσσα με νέες συναρτήσεις, μεταβλητές και τύπους δεδομένων Classes (τάξεις) Exceptions (εξαιρέσεις) Για να μπορεί να αντιμετωπίσει πιθάνα προβλήματα που μπορούν να προκύψουν κατά την εκτέλεση του προγράμματος Εύκολη σύνταξη εντολών

5 Ενότητα socket (module)
Το module socket προσφέρει στον προγραμματιστή τις συναρτήσεις και κλάσεις για να δημουργήσει προγράμματα που επικοινωνούν μέσω ενός δικτύου, με χρήση Stream Sockets για επικοινωνία με το πρωτόκολλο TCP (με σύνδεση) και Datagram Sockets για επικοινωνία με το πρωτόκολλο UDP (χωρίς σύνδεση)

6 Συναρτήσεις της ενότητας socket
mySocket = socket.socket( family, type ) family: AF_INET type: SOCK_STREAM: Stream socket (TCP) SOCK_DGRAM: Datagram socket (UDP)

7 Συναρτήσεις της ενότητας socket
bind Διασυνδέει τη socket που δημιουργήθηκε με μια συγκεκριμένη διεύθυνση mySocket.bind( address ) address: Η διεύθυνση αποτελείται από δύο στοιχεία σε μορφή (host, port) host: Διεύθυνση IP του Η/Υ port: Θύρα του Η/Υ που θα χρησιμοποιηθεί

8 Συναρτήσεις της ενότητας socket
listen Θέτει τη socket σε κατάσταση αναμονής για να περιμένει αίτηση από clients Χρησιμοποιείται σε servers mySocket.listen( backlog ) backlog: μέγιστος αριθμός πελατών που μπορούν να κάνουν αίτηση για σύνδεση στον server

9 Συναρτήσεις της ενότητας socket
accept Αποδέχεται μια αίτηση για σύνδεση από έναν πελάτη Επιστρέφει ένα tuple δύο στοιχείων (σύνδεση, διεύθυνση) connection, address = mySocket.accept() connection: Αντικείμενο socket μέσω του οποίου ο server επικοινωνεί με τον πελάτη address: Η διεύθυνση IP του πελάτη

10 Συναρτήσεις της ενότητας socket
send Αποστολή δεδομένων Χρησιμοποιείται σε connection-oriented επικοινωνία (TCP) mySocket.send( info ) info: Έχει τύπο string

11 Συναρτήσεις της ενότητας socket
sendto Αποστολή δεδομένων Χρησιμοποιείται σε connectionless επικοινωνία (UDP) mySocket.sendto( packet, address ) packet: Έχει τύπο string address: Διεύθυνση προορισμού Έχει τη μορφή ( host, port )

12 Συναρτήσεις της ενότητας socket
recv Λήψη δεδομένων Χρησιμοποιείται σε connection-oriented επικοινωνία (TCP) mySocket.recv( bufsize ) bufsize: Μέγιστος όγκος δεδομένων που μπορεί να παραληφθεί (σε bytes)

13 Συναρτήσεις της ενότητας socket
recvfrom Λήψη δεδομένων Χρησιμοποιείται σε connectionless επικοινωνία (UDP) packet, address = mySocket.recvfrom( bufsize ) packet: Πληροφορία που λήφθηκε address: Πηγή της πληροφορίας bufsize: Μέγιστος όγκος πληροφορίας που μπορεί να παραληφθεί (σε bytes)

14 Συναρτήσεις της ενότητας socket
close Τερματίζει τη λειτουργία του αντικειμένου socket που δημιουργήσαμε και κλείνει τη σύνδεση mySocket.close()

15 Server για TCP (1) tcpserver.py import socket
HOST = " " PORT = 5000 counter = 0 #step 1: create socket mySocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) #step2: bind the socket to address try: mySocket.bind( (HOST,PORT) ) except socket.error: print "Call to bind failed“ while 1: #step3: wait for connection request print "Waiting for connection..." Η διεύθυνση IP αναφέρεται στον Η/Υ που τρέχει το πρόγραμμα Δημιουργεί το αντικείμενο socket με το όνομα mySocket Διασυνδέει το αντικείμενο mySocket στο port 5000 Αν υπάρξει πρόβλημα (κατειλημμένο port) τότε σταματάει η εκτέλεση με ένα μήνυμα λάθους

16 Server για TCP (2) while clientMessage != "EXIT":
mySocket.listen(1) #step 4: establish connection for request connection, address = mySocket.accept() counter += 1 print "Connection", counter, "received from:", address[0] #step 5: echo data back to the client via connection connection.send( "Connection successful." ) clientMessage = connection.recv( 1024 ) while clientMessage != "EXIT": if not clientMessage: break print "CLIENT>>> " + clientMessage connection.send( clientMessage ) Ορίζει τον μέγιστο αριθμό πελατών που μπορούν να συνδεθούν σε 1. Δέχεται μια αίτηση για σύνδεση από κάποιον πελάτη Ορίζει το μέγιστο όγκο δεδομένων που μπορεί να δεχτεί από τον πελάτη Επικοινωνία μεταξύ πελάτη-διακομιστή

17 Server για TCP (3) #step6: close connection
print "Connection terminated" connection.close() Τερματίζει τη σύνδεση

18 Client για TCP (1) tcpclient.py import socket HOST = "127.0.0.1"
#step1: create socket print "Attempting connection" mySocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) #step2: make connection request to server try: mySocket.connect( (HOST,PORT) ) except socket.error: print "Call to connect failed" print "Connected to server“ Δημιουργία ενός stream socket Αίτηση για σύνδεση στον διακομιστή

19 Client για TCP (2) #step3: transmit data via connection
serverMessage = mySocket.recv( 1024 ) while serverMessage != "EXIT": if not serverMessage: break print "SERVER>>> " + serverMessage clientMessage = raw_input( "CLIENT>>> " ) mySocket.send( clientMessage ) #step4: close connection print "Connection teminated" mySocket.close() Επικοινωνία μεταξύ πελάτη-διακομιστή Τερματίζει τη σύνδεση με το διακομιστή

20 Server για UDP (1) udpserver.py import socket HOST = "127.0.0.1"
#step 1: create socket mySocket = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) #step 2: bind socket mySocket.bind( (HOST,PORT) ) while 1: #step 3: receive packet packet, address = mySocket.recvfrom( 1024 ) print "Packet received" print "From host: ", address[0] Δημιουργία ενός datagram socket για επικοινωνία χωρίς σύνδεση Διασύνδεση του αντικειμένου mySocket στο port 5000 Αναμονή μηνύματος Επιστρέφει το μήνυμα που δέχτηκε και τη διεύθυνση από όπου ήρθε

21 Server για UDP (2) print "Host port: ", address[1]
print "Length: ", len(packet) print "Containing: " print "\t" + packet #step 4: echo packet to client print "\nEcho data to client...", mySocket.sendto( packet, address ) print "Packet sent\n" mySocket.close() Δέχεται το μήνυμα που θα σταλεί και τη διεύθυνση που θα σταλεί

22 Client για UDP (1) udpclient.py import socket HOST = "127.0.0.1"
#step 1: create socket mySocket = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) while 1: #step 2: send packet packet = raw_input ( "Packet>>>" ) print "\nSending packet containing: ", packet mySocket.sendto( packet, (HOST, PORT) ) print "Packet sent\n“ #step 3: receive packet back from server packet, address = mySocket.recvfrom( 1024 ) Δημιουργία ενός datagram socket για επικοινωνία χωρίς σύνδεση Αποστολή του packet στο HOST με PORT Παραλαβή πακέτου από την διεύθυνση address με μέγιστο μήκος 1024 bytes

23 Client για UDP (2) print "Packet received: "
print "Form host: ", address[0] print "Host port: ", address[1] print "Length: ", len( packet ) print "Containing: " print "\t" + packet + "\n" mySocket.close()

24 Connection-oriented επικοινωνία πελάτη-διακομιστή
Παράδειγμα με TCP Connection-oriented επικοινωνία πελάτη-διακομιστή

25

26

27

28

29

30 Connectionless επικοινωνία πελάτη-διακομιστή
Παράδειγμα με UDP Connectionless επικοινωνία πελάτη-διακομιστή

31

32

33

34 Σχετικές Ιστοσελίδες - Βιβλιογραφία
H. M. Deitel, P. J. Deitel, J. P. Liperi, B.A. Weidermann, “Python: How To Program”, Upper Saddle River, NJ: Prentice Hall, 2002. Σχόλια: Τα προγράμματα δημιουργήθηκαν και δοκιμάστηκαν στο λογισμικό Python 2.5 για Windows XP


Κατέβασμα ppt "Ανάπτυξη Δικτύων Καθηγητής: Φουληράς Παναγιώτης"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google