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

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

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

ΠΑΓΚΑΛΟΣ ΙΩΑΝΝΗΣ ΣΙΣΜΑΝΗΣ ΝΙΚΟΣ. File Transfer Protocol

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

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

50 Ketseo,Theoni Sarif,Omar 104

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

MusicOnCloud: Μια cloud-based υπηρεσία online streaming μουσικής

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

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0

HTTP API v1.6 SMSBOX.GR HTTP API v

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

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

Εξοικείωση με τις εντολές ipconfig και ping

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

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

Linux με τη χρήση κονσόλας

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ ΛΟΓΑΡΙΑΣΜΩΝ ΗΛΕΚΤΡΟΝΙΚΗΣ ΑΛΛΗΛΟΓΡΑΦΙΑΣ ( accounts)

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Μεταφορά Αρχείων µε χρήση της Υπηρεσίας FTP σελ. 1

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

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

CS 150 Assignment 2. Assignment 2 Overview Opening Files Arrays ( and a little bit of pointers ) Strings and Comparison Q/A

Αποστολή και λήψη μέσω SMARTER MAIL

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

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

ΟΔΗΓΟΣ ΔΙΑΣΥΝΔΕΣΗΣ για το Έργο «Ανάπτυξη Πλατφόρμας Παροχής Υπηρεσιών Αποστολής και Λήψης Σύντομων Μηνυμάτων»

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

Εγχειρίδιο χρήσης συστήματος ηλεκτρονικής αλληλογραφίας της Ελληνικής Ομοσπονδίας Μπριτζ

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε. DICOM Επικοινωνία Γενικά

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

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

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Από τον κατάλογο Web επιλέγουμε το Page, οπότε στο κυρίως μέρος της οθόνης εμφανίζονται οι σελίδες τις οποίες έχουμε δικαίωμα να ενημερώσουμε.

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ LIVETRIP TRAVELLER

YourSMS User s Manual

Διαχείριση Πληροφοριών στο Διαδίκτυο. Εργαστήριο 1

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

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

ΟΔΗΓΟΣ ΓΙΑ ΕΚΔΟΣΗ ΨΗΦΙΑΚΟΥ ΠΙΣΤΟΠΟΙΗΤΙΚΟΥ

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

Network Address Translation (NAT)

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

ΟΔΗΓΟΣ ΧΡΗΣΗΣ WEBMAIL ΤΕΙ ΚΑΛΑΜΑΤΑΣ

ιαχείριση Πληροφοριών στο ιαδίκτυο

Connecto. Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Άγγελος Σφακιανάκης. Επιφάνεια Άμεσης Σύνδεσης

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

ΗΥ335 - Δίκτυα Υπολογιστών Χειμερινό εξάμηνο Φροντιστήριο Ασκήσεις στο TCP

Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών: Ρύθμιση Postfix SMTP Server, Courier IMAP, POP3 σε Ubuntu Linux

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Σύστημα Διαχείρισης Σκεπτόμενων Συσκευών CASE STUDY

Το αποτέλεσμα αυτής της ενέργειας είναι ότι το μήνυμα δεν θα φτάσει ΠΟΤΕ στον φοιτητή που σας το έχει στείλει.

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

ΠΡΩΤΟΚΟΛΟ HTTP ΕΝΤΟΛΩΝ ΔΙΑΣΥΝΔΕΣΗΣ ΕΚΔΟΣΗ 1.2

wget --post-file meme.jpg :9646

Πρώτη είσοδος στην θυρίδα φωνητικού ταχυδρομείου

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

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

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

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Κατανεμημένα Συστήματα. Javascript LCR example

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

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων Σωτήρης Γυφτόπουλος

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΠΛΑΤΦΟΡΜΑΣ OPENSMS

Singular Report Generator. Σχ 1 ηµιουργία Καταστάσεων SRG

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού

ΤΜΗΜΑ ΕΚΠΑΙΔΕΥΤΙΚΗΣ ΥΠΟΛΟΓΙΣΤΙΚΗΣ ΥΠΟΔΟΜΗΣ ΜΗΧΑΝΟΓΡΑΦΙΚΟ ΚΕΝΤΡΟ

databases linux - terminal (linux / windows terminal)

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

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

Υπηρεσία Πληροφορικών Συστημάτων Τομέας Διαχείρισης Συστημάτων και Εφαρμογών

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

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

2 η Σειρά Ασκήσεων Data Link Layer

Το βιβλίο διευθύνσεων των Windows

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

Δίκτυα Υπολογιστών Ενότητα 10: Ethernet και ARP

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ FORUM SITE

Οδηγίες Ανάκτησης Password λογαριασμού URegister

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

Τρίτη Πρόοδος [110 μονάδες] Απαντήσεις

Εγκατάσταση Λογαριασμού Αλληλογραφίας στο ελληνικό Outlook Express Περιεχόμενα

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Εγκατάσταση του PiNet για διαχείριση εργαστηρίου με Raspberry Pi. Συγγραφέας: Τριχόπουλος Γιώργος Δεκέμβριος 2016

-Δεν υπάρχουν.java αρχεία στο φάκελο.μόνο.class και το text file -Δεν γίνεται έλεγχος για Ν<0

Λύσεις 1 ης Ενδιάμεσης Εξέτασης στο ΗΜΥ213

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Transcript:

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο 2012-2013 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη Project 2012-2013 Υλοποίηση ενός chat server-client Παράδοση: 7/2/2013 Περίληψη Στο project αυτό θα υλοποιήσετε έναν chat client μαζί με τον αντίστοιχο server. Όλοι οι clients θα συνδέονται στον server, ο οποίος θα είναι υπεύθυνος για την προώθηση των μηνυμάτων στον κατάλληλο client. Ο κάθε client θα έχει ένα μοναδικό username, το οποίο το δηλώνει στον server όταν συνδεθεί για πρώτη φορά σε αυτόν. Έτσι οι υπόλοιποι clients θα στέλνουν σε αυτόν μηνύματα γνωρίζοντας μόνο το username του. Τύποι Μηνυμάτων Για να λειτουργήσει το σύστημά μας θα πρέπει να έχουμε ορίσει κάποια συγκεκριμένη μορφή στα μηνύματά μας. Κάθε μήνυμα θα έχει στην αρχή ένα byte με τον κωδικό του μηνύματος. Μετά τον κωδικό θα ακολουθούν τα κατάλληλα δεδομένα όπως ορίζει ο παρακάτω πίνακας MSG TYPE (1B) Decription 0x01 Login message Username 0x02 Logout message MSG Body 0x03 Text message The text that was send 0x04 Username does not exist An appropriate error message 0x05 User already logged in An appropriate error message

0x06 0x07 0x08 0xFE Request logged in users Response with logged users Broadcast message Uknown message type A message containing all the users currently logged in, in an appropriate form 0xFF General error An error message describing why the operation failed Είστε ελεύθεροι να προσθέσετε και τα δικά σας μηνύματα για οποιοδήποτε λόγο το κρίνετε απαραίτητο. Σε κάθε περίπτωση όμως δεν θα πρέπει να υπάρχει η πληροφορία του μήκους του πακέτου μέσα στο μήνυμά σας. Θα πρέπει να το παίρνετε προγραμματιστικά από το API της εκάστοτε socket βιβλιοθήκης. ΠΡΟΣΟΧΗ: Για τα text messages και μόνο, μετά το message type θα πρέπει να ακολουθεί και το username του αποστολέα, καθώς και του παραλήπτη με την εξής μορφή: 3$sender_username$receiver_username$body_of_the_text_msg Υλοποίηση Server Ο server ανάλογα με τα command line options που παίρνει θα πρέπει να κάνει τα εξής: 1. Θα πρέπει να δημιουργεί ένα TCP listening socket σε μια συγκεκριμένη port, στο οποίο θα συνδέονται όλοι οι clients που συνδέονται για πρώτη φορά. Την port θα την παίρνει μέσω του command line arguement -p. Για παράδειγμα αν δωθεί στο prompt η εντολή, >./chatserver -p 6886 η listening port του server θα πρέπει να είναι η 6886. 2. >./chatserver -p 6886 -b Αν δωθεί το όρισμα -b θα πρέπει να υποστηρίζει automatic server discovery. Αυτό μπορεί να γίνει πολύ εύκολα απλά κάνοντας broadcast την IP του server αλλά και σε ποια port κάνει listen. Έτσι οι clients αυτόματα, θα μπορούν να συνδέονται, χωρίς να χρειάζεται ο χρήστης να δώσει την ip και την port του server. Βέβαια, υπάρχει περίπτωση άλλα προγράμματα να κάνουν το ίδιο, οπότε με κάποιον

τρόπο θα πρέπει να είστε σε θέση να ξεχωρίσετε τα δικά σας broadcast μηνύματα. Την port στην οποία θα κάνετε broadcast, θα την ορίσετε εσείς με κάποιο define στο header file, προσέχοντας όμως να μην ανήκει σε κάποιες από τις well known ports που χρησιμοποιούν διάφορα προγράμματα. Πιο συγκεκριμένα ο server: 1. Θα ανοίγει ένα TCP listening socket το οποίο θα κάνει listen στην port που ορίζει το -p option, περιμένοντας για νέες συνδέσεις. 2. Αν έχει δωθεί το το -b option, θα αρχίσει να κάνει broadcast την IP διεύθυνσή του και την port στην οποία κάνει listen, χρησιμοποιώντας το κατάλληλο format μηνύματος. 3. Για κάθε νέα incoming σύνδεση, θα δημιουργεί ένα νέο socket, το οποίο θα το διαχειρίζεται ένα νέο thread. Επίσης θα εκτυπώνει το εξής μήνυμα: Client with IP xxxx just connected όπου xxxx είναι η IP του client που συνδέθηκε. 4. Οποιοδήποτε μήνυμα και να έρθει ο server θα πρέπει να το αγνοεί αν ο συγκεκριμένος client δεν έχει κάνει πρώτα login. Επίσης θα πρέπει να εκτυπώνει στην οθόνη το εξής μήνυμα: Ignoring message from client xxxx because is not logged in όπου xxxx η IP του client. 5. Μόλις o server λάβει ένα login message, ελέγχει αν ο συγκεκριμένος χρήστης είναι ήδη logged in. Αν όχι, τότε αποθηκεύει το username και το socket descriptor που του αντιστοιχεί. Αν είναι ήδη logged in ή υπάρχει κάποιος άλλος client με το ίδιο username, τότε επιστρέφει κατάλληλο μήνυμα σφάλματος. 6. Αν λάβει ένα request για τους logged in users, επιστρέφει κατάλληλο μήνυμα με τους online χρήστες. 7. Αν λάβει ένα text message ελέγχει αν ο παραλήπτης είναι online. Αν είναι, το προωθεί στον κατάλληλο παραλήπτη, διαφορετικά επιστρέφει κάποιο μήνυμα λάθους. 8. Αν λάβει κάποιο logout μήνυμα, απλά διαγράφει τον συγκεκριμένο χρήστη και τερματίζει την σύνδεση με αυτόν. 9. Επιπλέον ο server, κρατάει και τρεις counters. Ο πρώτος αποθηκεύει τον συνολικό αριθμό των μηνυμάτων που λήφθηκαν από τον server. Ο δεύτερος counter αποθηκεύει τον συνολικό αριθμό των bytes που λήφθηκαν, ενώ αντίθετα ο τρίτος κρατάει τον συνολικό αριθμό των bytes

που στάλθηκαν. Οι τιμές των counters θα πρέπει να τυπώνονται κάθε x δευτερόλεπτα (όπου το x το ορίζεται εσείς), από ένα ξεχωριστό thread. Υλοποίηση client Ο client ανάλογα με τα command line options που παίρνει θα πρέπει να κάνει τα εξής: 1. Θα πρέπει να συνδέεται σε έναν chatserver που ακούει σε μια συγκεκριμένη IP και port. Την IP, την port καθώς και το username θα πρέπει να τα παίρνει από κατάλληλα command line arguments. Για παράδειγμα στην εντολή, >./chatclient -a 192.168.1.10 -p 6886 -u mousakas η IP και η port του server είναι η 192.168.1.10 και 6886 αντίστοιχα, ενώ το username που θα χρησιμοποιήσει ο client είναι το mousakas. 2. Αν δεν δωθεί η IP και η port του server, θα πρέπει ο client να ξεκινήσει την διαδικασία του automatic server discovery, περιμένοντας κάποιο broadcast μήνυμα από τον server που περιέχει την πληροφορία που χρειάζεται για να συνδεθεί σε αυτόν. Πιο συγκεκριμένα ο client θα πρέπει: 1. Να συνδέεται σε έναν chatserver στην ΙP και port που παίρνει ως παραμέτρους μέσω τον ορισμάτων -a και -p αντίστοιχα, χρησιμοποιώντας TCP. 2. Αν δεν δοθούν τα -a και -p ορίσματα, τότε περιμένει μέχρι να λάβει κάποιο broadcast μήνυμα από τον server, που να περιέχει την IP και την port στην οποία πρέπει να συνδεθεί. Μόλις το λάβει συνδέεται κατευθείαν στον server. 3. Για να συνδεθεί στον server, ο χρήστης πρέπει να στείλει ένα login μήνυμα, πληκτρολογώντας απλά login στο prompt του client. 4. Για να πάρει ο χρήστης όλους τους συνδεδεμένους χρήστες, πληκτρολογεί στο prompt του client users. 5. Για να στείλει ο χρήστης κάποιο μήνυμα σε έναν άλλο user χρησιμοποιεί την εντολή sendto: ακολουθούμενη από το username του παραλήπτη ένα κενό και το κείμενο του μηνύματος.

6. Αντίστοιχα όταν ο client λαμβάνει ένα μήνυμα κειμένου από κάποιον άλλον χρήστη εμφανίζετε στην εξής μορφή: from:sender_username message_body. 7. Αν δωθεί η εντολή logout, στέλνεται το κατάλληλο μήνυμα στον server, τερματίζεται η σύνδεση και ο client κλείνει. 8. Σε κάθε περίπτωση θα πρέπει να εκτυπώνονται κατάλληλα μηνύματα, για τα διάφορα μηνύματα λάθους που μπορεί να λαμβάνονται από τον server. Οδηγίες To project θα πρέπει να υλοποιηθεί σε C ή C++ χρησιμοποιώντας τα posix sockets και όχι κάποια άλλη έτοιμη βιβλιοθήκη. Σας δίνονται επίσης και τα header files καθώς και οι main συναρτήσεις. Είστε ελεύθεροι να προσθέσετε τις δικές σας συναρτήσεις/μεθόδους, αλλά θα πρέπει να υλοποιήσετε αυτές που υπάρχουν στα header files. Δεν μπορείτε επίσης να αλλάξετε τα ορίσματά τους, καθώς και τα command line arguements των main συναρτήσεων. Το project σας θα πρέπει να είναι σε θέση να τρέχει σωστά σε Linux περιβάλλον. Είναι δική σας ευθύνη, αν προγραμματίζετε σε κάποιο άλλο λειτουργικό, να επιβεβαιώσετε πως ο κώδικάς σας τρέχει σωστά και σε Linux. Μαζί με τον κώδικά σας, θα παραδώσετε οπωσδήποτε και ένα Makefile που θα κάνει build το project σας. Για απορίες ή παρατηρήσεις χρησιμοποιήστε την λίστα του μαθήματος.