ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ
|
|
- Ῥέα Ουζουνίδης
- 8 χρόνια πριν
- Προβολές:
Transcript
1 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ / ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ «ΔΙΑΔΙΚΤΥΑΚΑ ΠΡΩΤΟΚΟΛΛΑ ΚΑΙ ΔΙΕΠΑΦΕΣ ΓΙΑ ΣΥΓΚΕΡΑΣΜΕΝΕΣ ΚΑΙ ΜΙΚΡΟΤΟΝΙΚΕΣ ΚΛΙΜΑΚΕΣ ΣΕ ΦΟΡΗΤΕΣ ΣΥΣΚΕΥΕΣ» Internet Protocols and Interfaces for Tempered and Microtonic Scales in Mobile Devices Καζδαρίδης Γεώργιος Λειβαδίτης Αναστάσιος ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ: Πολίτης Διονύσιος Θεσσαλονίκη, Ιούνιος 2015
2 ii
3 ΠΕΡΙΛΗΨΗ Η πτυχιακή αυτή εργασία ασχολείται με ένα πακέτο εφαρμογών σε περιβάλλοντα Windows για ηλεκτρονικούς υπολογιστές και Android για φορητές συσκευές. Πιο συγκεκριμένα, οι εφαρμογές αυτές είναι εξομοιωτές synthesizer, που τα συστήματα στα οποία είναι εγκατεστημένα μπορούν να επικοινωνούν ασύρματα μέσω WIFI δικτύων με χρήση Java Sockets. Επίσης, στις εφαρμογές συγκαταλέγονται διεπαφές που παρέχουν στον μουσικό/ερευνητή τη δυνατότητα παραγωγής μουσικής μικροτονικών και μη κλιμάκων. Αυτό γίνεται με τη βοήθεια παραδοσιακών οργάνων όπως η Ποντιακή Λύρα και το Σάζι. Επίσης, στη κατάλληλη διεπαφή ο χρήστης μπορεί να παράγει βυζαντινή μουσική με τρόπο ακριβή και όμοιο με αυτόν που παράγεται από τον ίδιο τον άνθρωπο. iii
4 ABSTRACT This thesis deals with a bunch of software applications, which are compatible with Windows for use on PCs and Android for use on mobile devices. More specifically, the applications created are synthesizer simulators, which give the ability to the systems that they are installed to communicate wirelessly via Wifi. Moreover, those applications include interfaces that give the musician/scientist the ability to produce music using microtonical and tempered scales. This is possible with the help of the traditional Greek instruments of Pontian Lyra and Sazi. Also, at a certain interface users can produce Byzantine music in a precise and similar way to the one human do it. iv
5 ΕΥΧΑΡΙΣΤΙΕΣ Ολοκληρώνοντας τις προπτυχιακές σπουδές μας παράλληλα με την παρούσα διπλωματική εργασία, θα θέλαμε πρώτα από όλους να ευχαριστήσουμε θερμά τους γονείς μας. Η αμέριστη υποστήριξη, συμπαράσταση και καθοδήγηση που μας προσέφεραν ήταν και είναι καθοριστική για την ορθή εξέλιξη της πορείας μας ακαδημαϊκά, αλλά και ως μέλη της κοινωνίας. Αμέριστη ήταν επίσης η στήριξη του επιβλέποντος της εργασίας μας, Επίκουρου Καθηγητή κ. Πολίτη Διονύσιου, τον οποίο οφείλουμε να ευχαριστήσουμε θερμά. Η συνεργασία μας υπήρξε υποδειγματική καθότι, εκτός από ένας εξαίρετος επιστήμονας, είναι και ένας θαυμάσιος χαρακτήρας ο οποίος ενδιαφέρεται για κάθε φοιτητή και την πρόοδό του. Τέλος ευχαριστούμε τους φίλους, συμφοιτητές και καθηγητές μας, για την βοήθεια και τις γνώσεις που μας προσέφεραν όλα αυτά τα χρόνια. Καζδαρίδης Γεώργιος - Λειβαδίτης Αναστάσιος 2015 v
6 ΠΕΡΙΕΧΟΜΕΝΑ Περίληψη... iii Abstract... iv ΚΕΦΑΛΑΙΟ Εισαγωγή Στόχος της διατριβής Δομή της πτυχιακής... 9 ΚΕΦΑΛΑΙΟ Sockets Η έννοια των Sockets(υποδοχές) Προγραμματισμός για TCP Sockets Oρισμός Socket Περιγραφή Λειτουργία Το μοντέλο client-server Παράδειγμα TCP Socket: Ανάπτυξη Client - Server εφαρμογής με TCP sockets O πελάτης ( client ) Ο εξυπηρετητής ( server ) Κατασκευαστές και μέθοδοι κλάσης Socket Κατασκευαστές και Μέθοδοι της κλάσης ServerSocket Σύνοψη-Συμπεράσματα ΚΕΦΑΛΑΙΟ Οι εφαρμογές Το πακέτο εφαρμογών μας Το Interface Piano Server Piano Client Οι δύο εφαρμογές σε αλληλεπίδραση Πεδίο Chat Επικοινωνία Server-Client vi
7 3.5 Η εφαρμογή για Android συσκευές Piano Client(Android) Το Interface του app Ένα χαρακτηριστικό παράδειγμα εφαρμογής του πακέτου μας ΚΕΦΑΛΑΙΟ Μικροτονική, Βυζαντινή Μουσική, Παραδοσιακά όργανα Κλίμακα Μικροτονική Βυζαντινή Μουσική Λύρα και Σάζι Η σχέση Λύρας-Σαζίου με την Βυζαντινή Μουσική Κεφάλαιο 5ο Γνωριμία με τις νέες διεπαφές του πακέτου εφαρμογών μας Διεπαφή «Παραδοσιακά Όργανα» Δύο διέσεις Τρεις διέσεις Τέσσερις διέσεις Πέντε διέσεις Διεπαφή «Βυζαντινή Μουσική» ΚΕΦΑΛΑΙΟ Σύνοψη Σύνοψη και αποτελέσματα Μελλοντική έρευνα Βιβλιογραφία vii
8 ΚΕΦΑΛΑΙΟ 1 Εισαγωγή 1.1 Στόχος της διατριβής Τα τελευταία χρόνια, η ραγδαία ανάπτυξη της τεχνολογίας συνέβαλε σημαντικά στην εξάπλωση των προϊόντων της στις σύγχρονες κοινωνίες, αφού αυτά έγιναν πιο προσιτά και πιο εύχρηστα. Η αγορά κατακλύστηκε από ηλεκτρονικούς υπολογιστές και φορητές συσκευές(κινητά και ταμπλέτες), αφού αυτά προσέφεραν την δυνατότητα παροχής λύσεων και κάλυψης αναγκών του ανθρώπου. Ανεπηρέαστος από την εξάπλωση αυτή δε θα μπορούσε να μείνει ο τομέας της μουσικής, που πλέον μέσω των εφαρμογών βρήκε λύσεις σε προβλήματα που χρόνια ταλανίζουν τους μουσικούς και τους ερευνητές της μουσικής. Ένα από αυτά ήταν η σύνδεση των μουσικών συσκευών μεταξύ τους, όπως το synthesizer, ή η σύνδεση τους με ηλεκτρονικούς υπολογιστές που πλέον θα μπορούσαν να δώσουν τεράστιες δυνατότητες λήψης και επεξεργασίας του ήχου. Τα πρότυπα σύνδεσης που χρησιμοποιούνταν παλιότερα κατά κόρον(π.χ. καλώδιο MIDI) κρίνονται πλέον ως παρωχημένα και υπήρχε η ανάγκη για εύρεση μιας πιο σύγχρονης και αποδοτικής εναλλακτικής σύνδεσης. Η εργασία αυτή είχε ως στόχο την ανάπτυξη ενός πακέτου τριών εφαρμογών εξομοιωτών synthesizer, που θα συνδέονταν και θα επικοινωνούσαν μεταξύ τους μέσω ενός ασύρματου δικτύου Wifi, με την υλοποίηση αυτή να γίνεται με την χρήση TCP Sockets που αναπτύχθηκαν σε γλώσσα Java και βασίστηκε στο γνωστό μοντέλο Client-Server. Οι τρεις συσκευές θα έπρεπε να μπορούν να λειτουργούν ταυτόχρονα, δηλαδή να παίζει ο χρήστης σε αυτές το όργανο το οποίο είχε επιλέξει. Κάθε συσκευή 8
9 θα έπρεπε να αναπαράγει τον ήχο από τα πλήκτρα της που πατάει ο χρήστης κάθε στιγμή, αλλά επίσης ταυτόχρονα και του ήχους από τα πλήκτρα που πατιούνται στις άλλες δύο συσκευές. Επιπλέον, οι άλλες δύο συσκευές θα έπρεπε να λειτουργούν και να αναπαράγουν ήχο ακόμη και από διαφορετικό όργανο από την πρώτη συσκευή. Ακόμη, η εργασία κλήθηκε να δώσει μια λύση στο πρόβλημα της ανεπάρκειας των συσκευών που υπήρχαν ώστε να αποδώσουν σωστά τους ήχους μικροτονικής, αφού όσες προσπάθειες έγιναν κρίθηκαν όχι ιδιαίτερα επιτυχημένες, κυρίως λόγω δυσχρηστίας των συσκευών από τον χρήστη και του όγκου τους, καθώς ήταν ιδιαίτερα μεγάλες. Έτσι, προσπαθήσαμε να δημιουργήσουμε ένα εύχρηστο περιβάλλον ώστε να μπορεί κάποια να έρθει σε επαφή και να παίξει σε μικροτονικές κλίμακες, με χρήση 2 παραδοσιακών οργάνων, της Ποντιακής Λύρας και του Σαζίου. Τέλος, υλοποιήσαμε μια εφαρμογή όπου ο χρήστης μπορεί να παράγει Βυζαντινή μουσική με τρόπο αποδοτικά και εύκολα. 1.2 Δομή της πτυχιακής Η πορεία του κειμένου οργανώνεται στα επόμενα πέντε κεφάλαια. Το πρώτο κεφάλαιο αποτελεί την εισαγωγή, ενώ μετά το πέρας του τελευταίου κεφαλαίου αναγράφονται οι αναφορές. Το δεύτερο κεφάλαιο περιγράφει τα Sockets, από την δημιουργία της έννοιας ως τις σημερινές μορφές τους και τις εφαρμογές που αυτά βρίσκουν. Επίσης, ερχόμαστε σε επαφή με το γνωστό μοντέλο πελάτη-εξυπηρετητή και βλέπουμε πως αυτό ενσωματώνεται στην δημιουργία των Java Sockets. Το τρίτο κεφάλαιο μας «συστήνει» την εφαρμογή την οποία δημιουργήσαμε. Βλέπουμε αναλυτικά τι περιλαμβάνει το οπτικό περιβάλλον της, το κομμάτι της λειτουργικότητάς της και και επεξηγούμε τους λόγους για τις επιλογές που κάναμε όταν την προγραμματίζαμε. Επιπρόσθετα, δίνουμε και ένα παράδειγμα εφαρμογής του πακέτου εφαρμογών μας, που καταδεικνύει το πόσο καινοτόμα και χρήσιμη μπορεί να είναι. Στο τέταρτο κεφάλαιο ορίζουμε και αναλύουμε μουσικές έννοιες όπως η Μικροτονική, η Βυζαντινή μουσική. Παράλληλα, ερχόμαστε σε επαφή με 2 παραδοσιακά όργανα, την Ποντιακή Λύρα και το Σάζι, και πάμε ένα ταξίδι στην ιστορία γνωρίζοντας την εξέλιξή τους. Το πέμπτο κεφάλαιο αναφέρεται εξολοκλήρου στο σχεδιασμό και την κατασκευή των διεπαφών παραγωγής Βυζαντινής Μουσικής και μουσικλης σε Μικροτονική με Λύρα και Σάζι. Όπως και στις προηγούμενες εφαρμογές, θα μιλήσουμε για το οπτικό περιβάλλον, την λειτουργία και τον προγραμματιστικό σχεδιασμό τους. 9
10 Το έκτο και τελευταίο κεφάλαιο αποτελεί μια σύνοψη των προηγούμενων ζητημάτων και συνεισφορών. Η εργασία αυτή κλείνει με την παράθεση μερικών ιδεών και θεμάτων, πάνω στα οποία πιθανώς να επικεντρωθεί το μελλοντικό ερευνητικό έργο πάνω στο ήδη υπάρχον πακέτο εφαρμογών. 10
11 ΚΕΦΑΛΑΙΟ 2 Sockets 2.1 Η έννοια των Sockets(υποδοχές) Τα sockets είναι μια έννοια που αρχικά πρωτοεμφανίστηκε στα λειτουργικά συστήματα UNIX. Το σύστημα εισόδου εξόδου (input/output) των socket στηρίζεται στις ακόλουθες διεργασίες: Open: Άνοιγμα αρχείου Read/Write: διάβασμα από ή εγγραφή στο αρχείο Close: κλείσιμο αρχείου Αυτές οι έννοιες επεκτάθηκαν τα τελευταία χρόνια τόσο στην επικοινωνία με χρήση φορητών συσκευών, όσο και στην επικοινωνία μεταξύ διεργασιών (inter-process communication). Τα so-ckets δηλαδή είναι μέρος του διαύλου επικοινωνίας (communi-cation channel) μεταξύ 2 διεργασιών. Τι είναι όμως τα socket? Ως υποδοχή(socket) ορίζουμε το κάθε τελικό σημείο (endpoint) ενός αμφίδρομου διαύλου επικοινωνίας ( two-way communication link) μεταξύ 2 διεργασιών που ε-εκτελούνται στο δίκτυο. Ταυτοποιείται δε από το συνδυασμό μιας IP διεύθυνσης και ενός αριθμού θύρας (port number). 2.2 Προγραμματισμός για TCP Sockets To στρώμα μεταφοράς αντιπροσωπεύεται στο Internet από τα πρωτόκολλα TCP (connection oriented) και UDP (connectionless, δηλ. με datagrams). Βάση λοιπόν κάθε δικτυακής εφαρμογής είναι το πώς χειριζόμαστε τα δύο αυτά πρωτόκολλα προγραμματιστικά μέσα στα τερματικά συστήματα. Η απάντηση εγκλείεται στη έννοια των sockets. Ένα socket (υποδοχή, πρίζα ) είναι μία οντότητα (αντικείμενο 11
12 στην περίπτωση της Java) μέσω της οποίας το δικό μας πρόγραμμα ανταλλάσσει δεδομένα με τον δίαυλο επικοινωνίας. Προγραμματιστικά δεν έχουμε παρά να διαβάζουμε από εκεί την ροή εισόδου στο σύστημά μας και αντίστροφα να γράφουμε εκεί την ροή εξόδου από το σύστημά μας. Ιδιαίτερα στην Java, υπάρχει πρόνοια οι δύο αυτές διαδικασίες να μην διαφέρουν από το γράψιμο / διάβασμα σε / από ένα αρχείο. Στην περίπτωση πολλών συνδέσεων TCP (πάντα αμφίδρομων), πρέπει σε κάθε μία να αντιστοιχείται στο δικό της socket. Για κάθε νέα επικοινωνιακή (TCP) σύνδεση δημιουργείται ένα socket. Η εξαφάνιση της σύνδεσης συνεπάγεται την εξαφάνιση του socket και το αντίστροφο. Όλα τα sockets τα οποία χειρίζεται μία συγκεκριμένη διαδικασία (η δική μας, ή μια από τις γνωστές εφαρμογές στο διαδίκτυο) έχουν βεβαίως το δικό τους όνομα για να ξεχωρίζονται προγραμματιστικά, αλλά είναι και το καθένα συνδεδεμένο στην άκρη μίας σύνδεσης προς την εφαρμογή που εξυπηρετείται. Η άκρη αυτή αναγνωρίζεται με έναν απλό αριθμό, το port no ή τον αρ. θύρας. Αρχίζοντας από το δικό μας socket (συγκεκριμένο αντικείμενο), μπορούμε νοητικά (πρακτικά γίνεται αυτόματα) να βρούμε τον αριθμό της αντίστοιχης σύνδεσης TCP (τον οποίο φέρουν όλα τα πακέτα του πρωτοκόλλου αυτού), να καταλήξομε στο άκρο του συνομιλητή μας και να βρούμε μέσα σε αυτόν το δικό του socket (συγκεκριμένο αντικείμενο), καθώς και το port no που αυτό εξυπηρετεί. Έτσι κατορθώνεται να συνεννοούνται το δικό μας με το δικό του πρόγραμμα. 2.3 Oρισμός Socket Socket είναι το ένα άκρο, από έναν επικοινωνιακό δίαυλο διπλής κατεύθυνσης, μεταξύ δύο προγραμμάτων που εκτελούνται στο δίκτυο. Περιλαμβάνει το πρωτόκολλο, την διεύθυνση και τον αριθμό θύρας του άκρου Περιγραφή Η έκδοση 4.1cBSD του Unix ( 1982 ), για τους υπολογιστές VAX, απ το πανεπιστήμιο του Berkeley, πρωτοεισήγαγε το socket interface σαν μια μέθοδο επικοινωνίας απομακρυσμένων διεργασιών. Είχαν αρχικά υλοποιηθεί στην γλώσσα C του Unix, αλλά η απήχηση που γνώρισαν, επέβαλε την μεταφορά τους τόσο σε άλλα λειτουργικά συστήματα ( π.χ. Winsock library για τα Microsoft Windows ), όσο και σε άλλες γλώσσες προγραμματισμού ( π.χ. Java ). Κάθε πρόγραμμα διαβάζει από και γράφει σε ένα socket, με τρόπο παρόμοιο της εγγραφής και ανάγνωσης αρχείων του file system. Υπάρχουν δύο είδη sockets : Tο πρώτο ονομάζεται TCP ( Transmission Control Protocol ) socket και είναι μια υπηρεσία προσανατολισμένη στην σύνδεση ( connection-oriented service ). Μπορούμε να το θεωρήσουμε ανάλογο της τηλεφωνικής υπηρεσίας, στην 12
13 οποία, μετά την εγκαθίδρυση μιας σύνδεσης μεταξύ δύο συνομιλητών, αυτή χρησιμοποιείται μέχρι το πέρας της συζητήσεως τους. Το άλλο είδος ονομάζεται UDP (Unreliable Datagram Protocol ) socket και είναι μια υπηρεσία χωρίς σύνδεση ( connectionless service ). To ανάλογο, σε αυτήν την περίπτωση, είναι το ταχυδρομείο : μπορούμε να στείλουμε πολλά πακέτα στον ίδιο παραλήπτη, αλλά δεν είναι σίγουρο ότι όλα θα ακολουθήσουν την ίδια διαδρομή ( σύνδεση ) για να φτάσουν στον προορισμό τους. Μία ακόμη σημαντική διαφορά, μεταξύ των παραπάνω δύο ειδών, είναι ότι τα TCP sockets εξασφαλίζουν μια αξιόπιστη μεταφορά της πληροφορίας : ότι αποστέλλεται από το ένα άκρο είναι σίγουρο ότι θα φτάσει στο άλλο. Στο UDP socket όμως δεν συμβαίνει αυτό. Είναι στην ευθύνη του αποστολέα να ελέγξει ότι αυτό που έστειλε, το έλαβε τελικά ο παραλήπτης και δεν χάθηκε στον δρόμο. Από την άλλη, η σύνδεση με TCP socket απαιτεί την ανταλλαγή τριών πακέτων χειραψίας ( handshake packets ) και είναι πιο χρονοβόρα στην αρχικοποίησή της από την αντίστοιχη με UDP datagrams. Οι προηγούμενες δύο διαφορές καθορίζουν τελικά και την χρήση των δύο αυτών ειδών. Για την αποφυγή σύγχυσης, να σημειώσουμε ότι ειδικά στην Java, ο όρος Socket χρησιμοποιείται για τα TCP sockets, στην ονοματολογία των κλάσεων και των μεθόδων, ενώ για την δήλωση των UDP sockets, χρησιμοποιείται ο όρος Datagram Λειτουργία Στον παρακάτω πίνακα βλέπουμε τις διάφορες κλάσεις για τα sockets που περιέχονται στο πακέτο java.net καθώς και το είδος τους. Μηχανισμός / Κλάση Περιγραφή Socket TCP άκρο - πελάτης ServerSocket ΤCP άκρο - εξυπηρετητής DatagramSocket UDP άκρο ( client & server ) DatagramPacket UDP πακέτο 13
14 ΙnetAddress Διεύθυνση Internet Protocol (IP) URL Uniform Resource Locator URLConnection Σύνδεση με αντικείμενο του web Το μοντέλο client-server Το ευρύτερα διαδεδομένο μοντέλο ανάπτυξης δικτυακών εφαρμογών είναι το μοντέλο του πελάτη-εξυπηρετητή (client- server ). Ο εξυπηρετητής είναι μια διεργασία, η οποία εκτελείται σε έναν υπολογιστή και αναμένει να συνδεθεί σε αυτήν κάποιο πρόγραμμα - ο πελάτης, όπως ονομάζεται -, για να του παράσχει υπηρεσίες. Ένα τυπικό σενάριο που ακολουθείται συνήθως, είναι το εξής : 1. Η διεργασία - εξυπηρετητής αρχίζει να εκτελείται σε κάποιον υπολογιστή. Μετά την αρχικοποίησή της, πέφτει σε λήθαργο, αναμένοντας μία διεργασία - πελάτη να επικοινωνήσει μαζί της και να της ζητήσει κάποια υπηρεσία. 2. Μία διεργασία - πελάτης αρχίζει να εκτελείται, είτε στο ίδιο σύστημα, είτε σε κάποιο απομακρυσμένο, το οποίο συνδέεται με τον υπολογιστή στον οποίο τρέχει ο εξυπηρετητής μέσω δικτύου. Η διεργασία πελάτης στέλνει μια αίτηση, μέσω του δικτύου, στον εξυπηρετητή, ζητώντας του κάποιου είδους υπηρεσία ( π.χ. μεταφορά αρχείου, απομακρυσμένη εκτύπωση, ανάγνωση και αποστολή mail και άλλες ). 3. Ταυτόχρονα με την εξυπηρέτηση κάποιου πελάτη, ο server έχει την δυνατότητα να δέχεται και αιτήσεις άλλων πελατών προς εξυπηρέτηση. Όταν ο εξυπηρετητής τελειώσει με όλους τους πελάτες, τότε ξαναπέφτει σε λήθαργο, περιμένοντας για μια καινούργια αίτηση και η διαδικασία ξαναρχίζει από την αρχή. Ορίζουμε ως σύνδεση, τον επικοινωνιακό δίαυλο μεταξύ δύο διεργασιών. Την σύνδεση μπορούμε να την θεωρήσουμε ως μία πεντάδα, που περιγράφεται ως εξής : 14
15 { πρωτόκολλο, τοπική-διεύθυνση, τοπική-διεργασία, απομακρυσμένη - διεύθυνση, απομακρυσμένη-διεργασία } Το πρωτόκολλο αναφέρεται στο σύνολο των κανόνων που διέπουν την επικοινωνία. Η τοπική-διεύθυνση και απομακρυσμένη-διεύθυνση, προσδιορίζουν την ταυτότητα των υποδικτύων και των υπολογιστών, στους οποίους εκτελούνται οι επικοινωνούσες διεργασίες. Η τοπική-διεργασία και απομακρυσμένη-διεργασία, προσδιορίζουν την ταυτότητα των διεργασιών που θα επικοινωνούν, καθώς σε έναν υπολογιστή, μπορούν να εκτελούνται περισσότερες της μιας διεργασίες. Κάθε μία από αυτές τις διεργασίες που εκτελούνται στον ίδιο host και που χρειάζονται επικοινωνία μέσω δικτύου, λαμβάνει έναν 16-bit ακέραιο αριθμό, ο οποίος αναπαριστά την θύρα ( port number ) της διεργασίας και κατ επέκταση, της υπηρεσίας. Ορίζουμε, επίσης ως μισή σύνδεση ( half association ), είτε το σύνολο { πρωτόκολλο, τοπική-διεύθυνση, τοπική-διεργασία }, είτε το σύνολο { πρωτόκολλο, απομακρυσμένη-διεύθυνση, απομακρυσμένη-διεργασία }. Η μισή σύνδεση ονομάζεται αλλιώς και socket Παράδειγμα TCP Socket: Ανάπτυξη Client - Server εφαρμογής με TCP sockets Στο σημείο αυτό θα ήταν χρήσιμο να δούμε μια υλοποίηση ενός TCP Socket μοντέλου βασιζόμενο στο μοντέλο Client-Server, ώστε να καταλάβουμε πόσο απλή είναι και πώς μεταφέρονται οι πληροφορίες όταν δημιουργηθεί μία σύνδεση. Μία από τις κλασικές υπηρεσίες που προσφέρονται στο δίκτυο, είναι η υπηρεσία αντήχησης ( echo service ). Η λειτουργία αυτή χρησιμοποιήθηκε προσαρμοσμένη στην πτυχιακή μας, με το κώδικα προσαρμοσμένο στις ανάγκες του λογισμικού μας για την μεταφορά του ήχου. Η λειτουργία echo που έχουμε παρακάτω ως παράδειγμα, χρησιμοποιεί για την σύνδεση TCP sockets και αριθμό θύρας 7, ενώ σκοπός της είναι να μεταδώσει πίσω στον πελάτη, που θα ζητήσει τέτοια υπηρεσία, ό,τι αυτός της στείλει. Δεν επεξεργάζεται δηλ. την είσοδο, απλά της στέλνει πάλι πίσω. Μία τέτοια εφαρμογή θα αναπτύξουμε εδώ σαν παράδειγμα, τόσο το πρόγραμμα της πλευράς του πελάτη, όσο και αυτό της πλευράς του εξυπηρετητή, μόνο που θα χρησιμοποιήσουμε έναν άλλο αριθμό θύρας, τον O πελάτης ( client ) Μια τυπική αλληλουχία βημάτων που συνήθως ακολουθούνται για το πρόγραμμα του client είναι η εξής : Socket() - αρχικοποίηση και σύνδεση στον server 15
16 getinputstream() και - σύνδεση του socket με τον στάνταρ μηχανισμό getoutputstream() εισόδου/εξόδου στη Java, δηλ. τα streams read() και write() - ανάγνωση και εγγραφή στο - συνδεδεμένο με το socket - stream.. - ακολουθούν και άλλες αναγνώσεις/εγγραφές close() - κλείνει το socket και απελευθερώνεται ο αντίστοιχος πόρος του συστήματος. Ας αναλύσουμε περαιτέρω τα βήματα που αναφέραμε, πριν να παραθέσουμε το πλήρες πρόγραμμα του πελάτη. Η δημιουργία ενός αντικειμένου της κλάσης Socket, γίνεται, πολύ απλά, καλώ-ντας έναν από τους οκτώ (!) κατασκευαστές ( constructors ) της κλάσης. Στο πρόγραμμά μας γίνεται με τον εξής κώδικα : Socket s = new Socket(args[0], 8205); δηλ. φτιάξε το αντικείμενο s, που είναι socket και σύνδεσέ το στην ΙΡ διεύθυνση που καθορίζεται από την πρώτη παράμετρο (args[0] - στην συγκεκριμένη περίπτωση, η ΙΡ διεύθυνση παρέχεται από τον χρήστη, ως το πρώτο όρισμα στο command line, με την εντολή εκτέλεσης του προγράμματος ). Εφόσον η σύνδεση είναι επιτυχής, μπορούμε να λάβουμε τα streams εισόδου/εξόδου του socket που δημιουργήσαμε, για να επιτελέσουμε στην συνέχεια Ι/Ο. Αυτό γίνεται γιατί, όπως προαναφέραμε, ο ενοποιημένος ( και μοναδικός ) μηχανισμός για Ι/Ο προγραμμάτων σε Java είναι τα streams. Για τον σκοπό αυτό, χρησιμοποιούμε τις μεθόδους getinputstream() και getoutputstream() που διαθέτει η κλάση Socket, ως εξής : DataInputStream sin = new DataInputStream(s.getInputStream()); 16
17 DataOutputStream sout = new DataOutputStream(s.getOutputStream()); Μετά την αρχικοποίηση και την λήψη των streams του socket, έχουμε είσοδο/έξοδο με τις γνωστές μεθόδους των streams. Π.χ. : sout.println( Hello ); // Έξοδος στο socket String message = sin.readline(); // Είσοδος από το // socket Επίσης μπορούμε να λάβουμε από το ίδιο το socket s, μια σειρά από πληροφορίες σχετικές μ αυτό, όπως την ΙΡ διεύθυνση που είναι συνδεδεμένο, καθώς και το port. System.out.println( Connected to + s.getinetaddress() + : + s.getport()); Όταν τελειώσουμε με το Ι/Ο, καλό είναι να απελευθερώνουμε το socket που είχαμε ανοίξει, γιατί, όπως και οι χειριστές αρχείων ( file handlers ), είναι πολύτιμος πόρος του συστήματος και μπορεί να εξαντληθεί.... finally { try { if ( s!= null) s.close(); } catch(ioexception ioe) { ; } } 17
18 Ακολουθεί το ολοκληρωμένο πρόγραμμα του client μέρους της υπηρεσίας echo : // The client program for the echo service // Written using JDK, ver import java.io.*; import java.net.*; public class EchoClient { public static void echoclient(datainputstream sin, DataOutputStream sout) throws IOException { DataInputStream in = new DataInputStream(System.in); PrintStream out = new PrintStream(sout); String line; while(true) { line = ""; // read keyboard input and write to TCP socket try { line = in.readline(); out.println(line); } catch(ioexception e) { System.out.println(e.getMessage()); } // read TCP socket and write to terminal... try { line = sin.readline(); System.out.println(line); 18
19 } catch(ioexception e) { System.out.println(e.getMessage()); } } } // End of echoclient() function... public static void main(string[] args) { Socket s = null; try { // Create the socket to communicate with "echo" // on the specified host s = new Socket(args[0], 8205); // Create streams for reading and writing lines // of text from and to this socket DataInputStream sin = new DataInputStream(s.getInputStream()); DataOutputStream sout = new DataOutputStream(s.getOutputStream()); // Tell the user that we ve connected System.out.println("Connected to " + s.getinetaddress() + ":" + s.getport()); // Use the echo feature... echoclient(sin, sout); } catch(ioexception e) { System.out.println(e); } 19
20 // Always be sure to close the socket... finally { try { if (s!= null) s.close(); } catch(ioexception e) { System.out.println("Closing socket..."); } } } // End of main() } // End of class Να παρατηρήσουμε σε αυτό το σημείο, ότι οι εντολές που σχετίζονται με αρχικοποίηση του socket και των streams αυτού, θα πρέπει να περιέχονται στο σώμα try εντολής κι αυτό γιατί υπάρχει περίπτωση να μην είναι εφικτή η σύνδεση, οπότε θα έχουμε και έγερση μιας εξαίρεσης IOException. Σε μια τέτοια περίπτωση, δεν θα πρέπει να πραγματοποιήσουμε λειτουργίες Ι/Ο σε μη συνδεδεμένο socket. Επίσης, η μέθοδος close() είναι θεμιτό να καλείται σε κάθε περίπτωση, γι αυτό και την καλούμε μέσα από την finally Ο εξυπηρετητής ( server ) Μια τυπική TCP εφαρμογή εξυπηρετητή ανοίγει ένα καλά - γνωστό/διαδεδομένο port για την λήψη αιτήσεων για σύνδεση και ύστερα δημιουργεί μία διεργασίαπαιδί, ή ένα ξεχωριστό νήμα εκτέλεσης για να εκτελέσει την υπηρεσία. Το port που ανοίγει ο server ονομάζεται καλά-γνωστό, γιατί αυτό χρησιμοποιεί ο οποιοσδήποτε πελάτης για να συνδεθεί στον εξυπηρετητή. Επίσης λέμε ότι ο server ακούει το port στο οποίο αρχικοποιεί το socket του, για καινούργιες συνδέσεις, δηλ. καινούργιους πελάτες. Γι αυτό το λόγο, το socket ονομάζεται listening socket. Θα πρέπει να δοθεί προσοχή στην επιλογή του αριθμού θύρας της υπηρεσίας, ο οποίος δεν θα πρέπει να είναι ήδη σε χρήση. Ο εξυπηρετητής, μόλις δεχθεί την σύνδεση καινούργιου πελάτη, γεννά μια καινούργια διεργασία - νήμα, για την εξυπηρέτηση των αιτήσεων του. Με αυτόν τον τρόπο, καθίσταται δυνατή η παράλληλη εξυπηρέτηση παλιών και η αποδοχή νέων πελατών. 20
21 Παρακάτω θα αναπτύξουμε τον αντίστοιχο εξυπηρετητή του EchoClient, ο οποίος αποτελείται από δύο κλάσεις : την κλάση EchoServer, για την αρχικοποίηση του listening-socket και την κλάση EchoThread, η οποία κληρονομεί την κλάση Thread της Java. Αντικείμενα της τελευταίας δημιουργούνται κάθε φορά που εντοπίζεται από τον EchoServer ένας νέος πελάτης, αναλαμβάνοντας την εξυπηρέτησή του. Η αλληλουχία βημάτων για το πρόγραμμα του server είναι η εξής : ServerSocket() - αρχικοποίηση του listening socket accept() - αναμονή και εντοπισμός καινούργιου πελάτη new Thread - δημιουργία καινούργιου thread για την εξυπηρέτηση πελάτη getinputstream() και - το καινούργιο socket που επιστρέφεται από την accept getoutputstream() συνδέεται με τον στανταρ μηχανισμό εισόδου/εξόδου στη Java, δηλ. τα streams read() και write() - ανάγνωση και εγγραφή στο - συνδεδεμένο με το socket - stream.. - ακολουθούν και άλλες αναγνώσεις/εγγραφές close() - κλείνει το socket ( όχι το listening ) και απελευθερώνεται ο αντίστοιχος πόρος του συστήματος. Η κλάση ServerSocket περιέχεται στο πακέτο java.net και παρέχει μια ανεξάρτητη συστήματος υλοποίηση σύνδεσης TCP socket, απ την πλευρά του εξυπηρετητή, με βάση το client/server μοντέλο. Το αντικείμενο αυτής της κλάσης συνδέει το πρόγραμμα του εξυπηρετητή με κάποια θύρα του συστήματος, για να μπορεί αυτός στην συνέχεια να ακούει για την σύνδεση νέων πελατών. Στον κατασκευαστή του αντικειμένου προσδιορίζεται ο αριθμός θύρας και σε περίπτωση που δεν χρησιμοποιείται ήδη από άλλη υπηρεσία, δημιουργείται το αντικείμενο. Αν όμως η θύρα είναι κατειλημμένη, τότε εγείρεται εξαίρεση. Ο κώδικας είναι ως εξής : ServerSocket serversoc = new ServerSocket(8205); Αν το αντικείμενό μας κατασκευαστεί επιτυχώς, τότε ο server είναι έτοιμος για την αποδοχή καινούργιου πελάτη : 21
22 Socket incoming = serversoc.accept(); Η μέθοδος accept() μπλοκάρει το νήμα απ το οποίο έχει κληθεί, μέχρι να παρατηρηθεί δραστηριότητα στο listening-socket, δηλ. μέχρι να συνδεθεί καινούργιος πελάτης. Όταν συμβεί το τελευταίο, τότε η accept() επιστρέφει ένα καινούργιο Socket ( όχι listening-socket ) με το οποίο αρχίζει πλέον η επικοινωνία. Αυτό συμβαίνει για να μπορούμε να συνεχίσουμε να ακούμε απ το listening socket και άλλους πελάτες, χωρίς να χρειάζεται να αλλάξουμε τον αριθμό της θύρας ( well-known ). Επίσης, κατασκευάζεται ένα νέο αντικείμενο τύπου EchoThread και αρχίζει η εκτέλεσή του : EchoThread et = new EchoThread(incoming); et.start(); Στην κατασκευή του νέου thread περνούμε σαν παράμετρο το socket που επέστρεψε η accept(), για να λάβουμε ύστερα, τα συνδεδεμένα με αυτό, streams εισόδου/εξόδου : DataInputStream in = new DataInputStream(s.getInputStream()); PrintStream out = new PrintStream(s.getOutputStream()); Από εκεί και πέρα ακολουθεί Ι/Ο στο socket ( μέσω των streams του ), σαν να είχαμε Ι/Ο σε αρχείο. Στο τέλος, το thread εξυπηρέτησης του πελάτη κλείνει το socket που μας είχε επιστρέψει η accept ( μέθοδος close() ) και τερματίζει την εκτέλεσή του. Το listening socket παραμένει ανοικτό, απελευθερώνεται όμως πριν τον τερματισμό του ίδιου του EchoServer. Πάλι σημειώνουμε την χρήση των μπλοκ try, για να αποφύγουμε την περίπτωση της χρησιμοποίησης κάποιου πόρου ( στην περίπτωσή μας socket ), ο οποίος πιθανόν δεν μας έχει διατεθεί από το σύστημα. Ακολουθεί το πλήρες πρόγραμμα του εξυπηρετητή της υπηρεσίας echo, με τις δύο κλάσεις του. // Server program for the echo service. An alternative // to the standard echo at port 7. We use TCP port
23 // Written using JDK import java.net.*; import java.io.*; import java.lang.*; import java.util.*; public class EchoServer { public static void main(string args[]) { // initialize the network connection try { ServerSocket serversoc = new ServerSocket(8205); // Now sit in an infinite loop and wait for // requests... while (true) { // accept the message Socket incoming = serversoc.accept(); // spawn a child to serve the request EchoThread et = new EchoThread(incoming); et.start(); } } catch (IOException e) { System.out.println("Error : " + e.getmessage()); } } // End of main 23
24 } // End of class EchoServer() class EchoThread extends Thread { // The socket we are writing to Socket s; // Our constructor EchoThread(Socket s) { this.s = s; } // The run method of the thread... public void run() { boolean finished = false; try { // Create streams for reading / writing lines of text to the socket DataInputStream in = new DataInputStream(s.getInputStream()); PrintStream out = new PrintStream(s.getOutputStream()); // Print a message: System.out.println("Client from : " + s.getinetaddress() + " port " + s.getport()); // now get the input from the socket... while(!finished) { String st = in.readline(); // Send the same back to client 24
25 out.println(st); // Write it to the screen as well System.out.println(st); // If the input was 'quit' then exit... if (st.equals("quit")) { finished = true; System.out.println("Thread exiting..."); } } } catch (IOException e) { System.out.println("Error : " + e.getmessage()); } // Always be sure to close the socket... finally { try { if (s!= null) s.close(); } catch(exception e) { System.out.println("Error : " + e.getmessage()); } } } // End of run } // End of class EchoThread Κατασκευαστές και μέθοδοι κλάσης Socket Παραθέτουμε, ενδεικτικά, μερικούς από τις μεθόδους και τους κατασκευαστές της κλάσης Socket. 25
26 Κατασκευαστές Socket(InetAddress, int) Δημιουργεί ένα stream ( TCP ) socket και το συνδέει στο port και την ΙΡ διεύθυνση που καθορίζονται ως παράμετροι. Socket(String, int) Δημιουργεί ένα stream ( TCP ) socket και το συνδέει στο port του host, του οποίου το όνομα καθορίζεται στις παραμέτρους. Μέθοδοι close() Κλείσιμο του socket ( απελευθέρωσή του πίσω στο σύστημα ). getinetaddress() Επιστρέφει την διεύθυνση του απομακρυσμένου host στην οποία το socket είναι συνδεδεμένο. getinputstream() Επιστρέφει ένα stream εισόδου γι αυτό το socket. getlocaladdress() Επιστρέφει την διεύθυνση του host στον οποίο το socket αρχικοποιήθηκε ( την τοπική διεύθυνση ). getlocalport() Επιστρέφει τον αριθμό θύρας ( τοπικό ) του host στον οποίο το socket αρχικοποιήθηκε. getoutputstream() 26
27 Επιστρέφει ένα stream εξόδου αυτού του socket. getport() Επιστρέφει τον αριθμό θύρας του απομακρυσμένου host στον οποίο το socket έχει συνδεθεί Κατασκευαστές και Μέθοδοι της κλάσης ServerSocket Παραθέτουμε, ενδεικτικά, μερικούς από τις μεθόδους και τους κατασκευαστές της κλάσης ServerSocket. Κατασκευαστές ServerSocket(int) Δημιουργεί ένα server socket στη θύρα της οποίας ο αριθμός καθορίζεται απ την παράμετρο. Αν ο αριθμός είναι το 0, τότε αφήνεται στο σύστημα η επιλογή μιας ελεύθερης ( μη χρησιμοποιούμενης ) θύρας. ServerSocket(int, int) Δημιουργεί ένα server socket στην θύρα της οποίας ο αριθμός καθορίζεται απ την πρώτη παράμετρο, ενώ επιτρέπει τόσες συνδέσεις να περιμένουν στην ουρά του port, μέχρι να γίνουν αποδεκτές, όσες η δεύτερη παράμετρος. Και εδώ, το 0 επιλέγει μια ελεύθερη θύρα. Μέθοδοι accept() Ακούει το server socket για πιθανή σύνδεση που θα γίνει και την αποδέχεται. close() 27
28 Κλείνει το server socket. getinetaddress() Επιστρέφει την τοπική διεύθυνση αυτού του server socket. getlocalport() Επιστρέφει το port που αυτό το server socket ακούει. 2.4 Σύνοψη-Συμπεράσματα Συμπερασματικά παρατηρούμε τα εξής στα παραπάνω χαρακτηριστικά παραδείγματα προγραμματισμού sockets σε server και client: Με την Java, ο προγραμματισμός των sockets είναι ένα πολύ απλό θέμα και απαιτεί λίγες σχετικά γραμμές κώδικα. Η αποστολή και λήψη μηνυμάτων εξομοιώνεται με τις γενικές αρχές του I/O στην γλώσσα αυτή. Το αντικείμενο SocketServer αφορά τον server, δηλ. αυτόν πού δέχεται κλήσεις και οφείλει να ανταποκριθεί σε αυτές. Αντίθετα ο client επενεργεί αποκλειστικά με αντικείμενο Socket. Υπάρχει πάντοτε θέμα πολυ-προγραμματισμού για τον server, το οποίο στην περίπτωση της Java επιλύεται με threads. Υπάρχει θέμα εισαγωγής timeouts σε όλες τις περιπτώσεις πού αναμένομε κάτι να αφιχθεί από την άλλη μεριά. Δεν μας απασχολεί το port no του client. Ο client δεν αναμένει δημιουργία νέας σύνδεσης από την πλευρά του δικτύου ώστε να χρειάζεται να γνωρίζει που να την συνδέσει. Στην μεριά του client ασχολούμαστε μόνο με το αντικείμενο socket που εμείς δημιουργήσαμε και μέσω του οποίου χρησιμοποιούμε και διαχειριζόμαστε την σύνδεση. 28
29 ΚΕΦΑΛΑΙΟ 3 Οι εφαρμογές 3.1 Το πακέτο εφαρμογών μας Οι απαιτήσεις της εργασίας αυτής επέβαλαν για την ανάπτυξη των ζητούμενων την δημιουργία ενός πακέτου εφαρμογών που θα ήταν ένας εξομοιωτής synthesizer, τόσο για το περιβάλλον τον Microsoft Windows, όσο και για αυτό του Android, για τις εκδόσεις από και πάνω. Έτσι, αρχικά αναπτύξαμε για τα Windows από την αρχή μια εφαρμογή ενός εξομοιωτή synthesizer, χρησιμοποιώντας το γνώριμο λογισμικό NetBeans και σαν εργαλείο την γλώσσα Java στην τελευταία έκδοσή της. H γλωσσα επιλέχθηκε διότι μας προσέφερε ευελιξία, ώστε στη συνέχεια να αναπτυχθεί με την ίδια η εφαρμογή για Android στο νεαρής ηλικίας λογισμικό Android Studio, που αποτελεί πλέον το επίσημα υποστηριζόμενο από την Google λογισμικό ανάπτυξης Android εφαρμογών. Ας δούμε λοιπόν τις εφαρμογές των Windows. Οι εφαρμογές ονομάστηκαν PianoServer και PianoClient(αναπτύχθηκε μια client για Windows και μια για Android). Η PianoServer είναι αυτή που δημιουργήθηκε με σκοπό να αποτελέσει την server εφαρμογή στο Socket που αναπτύχθηκε μεταξύ 3 υπολογιστικών συστημάτων, δύο σε Windows και μία σε Android. Η εφαρμογή PianoServer περιλαμβάνει τρία Jframe: τα Piano_play.java, ByzMusic.java, Music.java και μια κλάση RecieveMessage.java. Αντίστοιχα και η εφαρμογή PianoClient περιλαμβάνει 3 JFrame ClientForm.java, ByzMusic.java, Music.java και μια κλάση ReceiveMessage.java. Θα εξηγήσουμε στην πορεία την λειτουγία όλων αυτών των αρχείων java. 3.2 Το Interface Τα αρχεία JFrame Piano_play.java και ClientForm.java δημιουργούν τα γραφικά περιβάλλοντα που βλέπουμε παρακάτω, του PianoServer και PianoClient αντίστοιχα. Είναι γενικά οι βασικές κλάσεις και των 2 εφαρμογών και οι βασικότερες διεργασίες εκτελούνται σε αυτές. 29
30 Piano Server Piano Client 30
31 Το περιβάλλον που έχουμε δημιουργήσει είναι όπως βλέπουμε ίδιο και στις 2 περιπτώσεις. Κάθε πλήκτρο έχει δημιουργηθεί ώστε να μην είναι «νεκρό», αλλά έχοντας ευαισθησία ακόμα και στο απλό πέρασμα του κέρσορα από επάνω τους, ακόμα και αν δεν πατηθούν, πράγμα που είναι ορατό, αφού αλλάζουν φωτεινότητα στην περίπτωση αυτή. Τα λευκά πλήκτρα που δημιουργήθηκαν είναι κατά σειρά από αριστερά προς τα δεξιά τα C D E F G A B C1 D1 E1 και οι αντίστοιχες διέσεις οι C# D# F# G# Bb C#1 Eb. Σε κάθε πίεση του πλήκτρου από τον κέρσορα με κλικ το αντίστοιχο πλήκτρο μετακινείται προς τα κάτω, ουσιαστικά γίνεται δηλαδή μια εξομοίωση της πίεσης ενός πλήκτρου ενός αληθινού synthesizer. Για να δούμε το θέμα από την «πίσω» πλευρά του, την προγραμματιστική, σε κάθε πίεση ενός πλήκτρου έχει ανατεθεί μια συγκεκριμένη διαδικασία. Το πλήκτρο όταν το πρόγραμμα τρέχει αναμμένη από τον χρήστη να πιεστεί, δηλαδή υπάρχει ένας listener που περιμένει την πράξη της πίεσης πλήκτρου. Όταν αυτή συμβεί, εκτελείται η αναπαραγωγή ενός.wav αρχείου, που κάθε φορά είναι αρχείο της νότας του αντίστοιχου πλήκτρου(του αντίστοιχου οργάνου, που έχει επιλέξει ο χρήστης). Ο χρόνος που θα ανοιχτεί και θα κλείσει το αρχείο είναι συγκεκριμένος και έχει προκαθοριστεί από εμάς. Η συγκεκριμένη ενέργεια γίνεται όσες φορές ζητηθεί από το πρόγραμμα και δεν παρουσιάζει καμία καθυστέρηση που να είναι αντιληπτή από τον χρήστη. Στην μουσική πλευρά τώρα, το κάθε αρχείο.wav είναι μια συγκεκριμένη νότα ξεκινώντας από το C.WAV που είναι η νότα C = C4 = 259,412Hz καταλήγοντας στην νότα 31
32 Ε1. Για λόγους ευχρηστίας και ευκολότερης ανάπτυξης, κυρίως λόγω της μικρής «φιλικότητας» της Java απέναντι στη μουσική και τα θέματά της, χρησιμοποιήσαμε wav αρχεία και όχι πιο σύγχρονα format μουσικών αρχείων. Επιπλέον, οι διάφορες συναρτήσεις παραγωγής ήχου δεν ήταν ιδιαίτερα αξιόπιστες στην απόδοση ήχων με τον τρόπο που θα θέλαμε και θα ήταν σίγουρα πιο προσιτοί στο ανθρώπινο αυτί. Τέλος, να τονίσουμε ότι τα αρχεία είναι ενσωματωμένα στο πακέτο προγραμμάτων που αναπτύξαμε καθαρά για λόγους ευκολίας. Είναι πολύ εύκολο να τροποποιηθούν τα αρχεία από κάποιον που γνωρίζει προγραμματισμό και να αλλαχτούν ακόμη και εξολοκλήρου οι επιλογές οργάνων που έγιναν. Στο επάνω μέρος της εφαρμογής βλέπουμε τα πλήκτρα επιλογής του οργάνου που θέλουμε να παίζει ο εξομοιωτή μας. Τα όργανα που εμείς εισάγαμε ήταν τα εξής: Double Bass, Steel Drums, Piano, Electric και η Ποντιακή λύρα, λόγου του της καταγωγής του δημιουργού. Ο χρήστης μπορεί να επιλέξει ποιο όργανο θα ακούγεται ενώ πατάει τα πλήκτρα(παίζει μουσική). Αρχικά σαν προεπιλεγμένο από default είναι το πιάνο. Ωστόσο, μπορεί να επιλέξει οποιαδήποτε στιγμή το επιθυμεί κάποιο άλλο όργανο και η αλλαγή γίνεται άμεσα. Η παραπάνω διαδικασία γίνεται με τη μεταβλητή που ονομάσαμε M_Organo στην οποία κάθε φορά επιλέγεται που ο χρήστης θα επιλέξει ένα όργανο, στη μεταβλητή μας αποθηκεύεται ένας χαρακτήρας, που είναι το πρώτο γράμμα του κάθε οργάνου που επιλέχθηκε. Έτσι, το σύστημα γνωρίζει ανά πάσα στιγμή ποιο όργανο είναι επιλεγμένο και αναγνωρίζει άμεσα κάθε εναλλαγή, τη στιγμή που γίνεται. Με τον τρόπο αυτό αναπαράγει κάθε φορά το αντίστοιχο αρχείο που χρειάζεται. Η νότα που αναπαράγεται θα είναι η Nota=M_Organo+Nota; Το M_Organo αρχικοποιείται με την τιμή p, δηλαδή αντιστοιχεί στο πιάνο, που όπως προείπαμε είναι επιλεγμένο by default. Τέλος, να πούμε ότι η λειτουργία της εφαρμογής επιτρέπει να πατηθούν πλήκτρα ταυτόχρονα ή πολλές φορές συνεχόμενα και η εφαρμογή να εκτελεί όλες τις εντολές άμεσα χωρίς σφάλμα Piano Server Η εφαρμογή PianoServer, εκτός από τις λειτουργίες που υλοποιήθηκαν στην ανάπτυξή της, φιλοξενεί και μία επιπλέον λειτουργία, που ίσως είναι και η σημαντικότερης σημασίαw για αυτήν την πτυχιακή εργασία. Το πρόγραμμα έχει την δυνατότητα να ξεκινάει μια λειτουργία Client-Server, σύμφωνα με τις αρχές που περιγράψαμε πιο πάνω, στο κεφάλαιο των Sockets, αφού ουσιαστικά το δίκτυο που δημιουργείται είναι ένα socket. O χρήστης, πιέζοντας το πλήκτρο Start Server, έχει τη δυνατότητα να δημιουργήσει ένα server στο τοπικό δίκτυο που είναι συνδεδεμένοι οι υπολογιστές μας (εμείς το δοκιμάσαμε στο πιο προηγμένο τεχνολογικά που είχαμε, το δίκτυο Wifi) και να είναι 32
33 «ορατός» σε κάθε συσκευή client που θα μπορούσε να το «δει», εφόσον έχει το αντίστοιχο λογισμικό client σε κάποια εφαρμογή της. Ο server μας πλέον περιμένει στην αναμονή αίτημα από οποιονδήποτε client για να συνδεθεί μαζί του Piano Client Ο Piano Client από τη μεριά του, εκτός από τις προαναφερόμενες μουσικές λειτουργίες που έχει και μοιράζεται με τον Server, διαφέρει από τον τελευταίο επειδή έχει την δυνατότητα να στέλνει αιτήσεις σύνδεσης σε διαθέσιμους Server το τοπικού δικτύου μας. Αυτό γίνεται με το αντίστοιχο κουμπί Connect Server και υλοποιείται με τον αντίστοιχο κώδικα, με μικρές τροποποιήσεις, που δίνεται σαν παράδειγμα στο κεφάλαιο των sockets. Ωστόσο, για να επιτευχθεί η σύνδεση θα πρέπει να γνωρίζουμε την IP που «κατέχει» ο Server μας το τοπικό δίκτυο, έτσι ώστε να ρυθμίσουμε τον client για να τον αναζητήσει. Επιπροσθέτως, θα πρέπει να ορίσουμε τόσο στον Server όσο και στον Client μια πόρτα(port) μέσω της οποίας θα επιτευχθεί η σύνδεση μεταξύ των δύο εφαρμογών. Αυτό γίνεται από τον κώδικα και προρυθμίζεται πριν εκκινήσουμε τις εφαρμογές μας. 33
34 3.3.1 Οι δύο εφαρμογές σε αλληλεπίδραση Επομένως όταν δημιουργηθεί ένας server από το PianoServer και στην συνέχεια ο PianoClient εντοπίσει τον Server και συνδεθεί σε αυτόν, έχουμε βάλει να εμφανίζονται μηνύματα επιτυχίας ή αποτυχίας. Αν συνδεθούν στον Server εμφανίζεται client request accepted, ενώ στον client εμφανίζεται connected to server. Ενώ αν ο server ξαναδημιουργήσει έναν server εμφανίζεται το μήνυμα No client Avaivable. 34
35 3.3.2 Πεδίο Chat Επίσης υπάρχουν ακόμα το κουμπί send, ένα textarea και ένα textfield και στις 2 εφαρμογές. Τα οποία μας βοηθούν στην συζήτηση μεταξύ server και client αν χρειαστεί, αλλά και στο να γνωρίζουμε τι πλήκτρα πατάει ο client. Πως όμως χρησιμοποιούνται όλα αυτά? Μπορούμε να γράψουμε ένα μήνυμα (οποιασδήποτε μορφής) στο πεδίο του textfield και στην συνέχεια αφού έχουμε την ευκαιρία διόρθωσης του μηνύματος, πατώντας το κουμπί send αποστέλλουμε το μήνυμα μας. Το μήνυμα αυτό θα εμφανιστεί στον client στο πεδίο του textarea. Ομοίως, ο client έχει την δυνατότητα να «απαντήσει» στον server, δηλαδή να δημιουργηθεί ένας «διάλογος», δηλαδή μια αμφίδρομη επικοινωνία, πράγμα που είναι μια από τις πιο σύγχρονες μορφές διαδραστικότητας στην ψηφιακή εποχή που ζούμε. Πακέτα δεδομένων στέλνονται με την πίεση του send από τον server στον client και vice versa. Ενδεικτικά, οι ενέργειες που αναλύσαμε φαίνονται στις παρακάτω εικόνες, από προηγούμενη εξομοίωση που πραγματοποιήσαμε: 35
36 3.4 Επικοινωνία Server-Client Στην περίπτωση που ο Client είναι συνδεδεμένος με τον Server όταν πατηθεί μια νότα στον client κατευθείαν εμφανίζει στο textarea του Server ποια ή ποιες νότες έχουν πατηθεί. Επίσης όταν πατηθεί η νότα στον Client αναπαράγεται από τον Client αλλά και από τον Server. Πώς το πετυχαίνουμε αυτό όμως. Η νότα που επιλέγεται από τον Client εκτός του ότι αναπαράγει ένα.wav αρχείο, στέλνει και μια πληροφορία στον Server, στην ουσία ποια νότα πατήθηκε. Ο Server με την σειρά του λαμβάνει την πληροφορία, η οποία μεταφράζεται, ενώ παράλληλα εμφανίζεται η αντίστοιχη νότα στο πεδίο textarea και αναπαράγει το κατάλληλο.wav αρχείο. Ο server θα εκτελέσει την αναπαραγωγή του τρέχοντος αρχείου που εκτελεί και ο Client (ίδιο όργανο, ίδια νότα ) και παράλληλα θα μπορεί να παίξει μια οποιαδήποτε νότα με οποιοδήποτε όργανο από την ίδια την εφαρμογή. 36
37 Με τον τρόπο αυτό είναι δυνατόν ο χρήστης να παίξει από υπολογιστή, κινητό ή ταμπλέτα(για τα δύο τελευταία θα παρουσιάσουμε συνοπτικά την αντίστοιχη εφαρμογή που υλοποιήθηκε παρακάτω) και να ακούγεται ο ήχος τόσο από το ίδιο το μηχάνημα που παίζει, όσο και από το άλλο απομακρυσμένο μηχάνημα. Τα 2 λειτουργικά συστήματα που συμμετέχουν θα έχουν την δυνατότητα να παίζουν ταυτόχρονα και με οπτικοακουστική επικοινωνία μεταξύ των χρηστών. Επιπλέον, ο Client μπορεί να πληκτρολογήσει στο πεδίο textfield του, τις νότες που θέλει, να πατήσει το κουμπί send και στην συνέχεια οι νότες αυτές να αναπαραχθούν από τον Server. Προγραμματιστικά τώρα, αυτές οι λειτουργίες που βοηθούν στην επικοινωνία των 2 συστημάτων, υποστηρίζονται από την κλάση ReceiveMessage.javva η οποία υπάρχει και στον Server αλλά και στον Client. Στην ουσία η κλάση δέχεται 2 ορίσματα το textarea του τρέχοντος συστήματος που βρίσκεται και το μήνυμα που δέχεται το τρέχων σύστημα. Και μετά αναλόγως, εμφανίζει το μήνυμα στο πεδίο textarea και αν απαιτείται κάνει και την αναπαραγωγή της νότας που δόθηκε. Τα πλεονεκτήματα στο παράλληλο(ταυτόχρονο) παίξιμο των Server και Client είναι πολύ σημαντικά: έχουμε πετύχει την μέγιστη μείωση χρόνου καθυστέρησης αναπαραγωγής της νότας και παράλληλα δίνουμε την ευκαιρία σε Server και Client να πετυχαίνουν πλήρη παραλληλισμό χωρίς καθυστερήσεις που θα ήταν αντιληπτές. 3.5 Η εφαρμογή για Android συσκευές Πριν προχωρήσουμε παρακάτω, δεν θα πρέπει να παραλείψουμε ένα πολύ σημαντικό κομμάτι της ανάπτυξης του πακέτου εφαρμογών μας, την ανάπτυξη ενός Client για συσκευές Android, κατάλληλου για χρήση σε κινητά ή ταμπλέτες. Είναι τόσο διαδεδομένη η χρήση φορητών συσκευών στην καθημερινή ζωή μας στην εποχή που ζούμε, που κάθε οικογένεια σχεδόν έχει στην κατοχή της μία. Αυτόν μας δίνει ένα πολύ μεγάλο κίνητρο- αφού το κοινό που μπορούσε να το χρησιμοποιήσει είναι τεράστιο- στο να αναπτύξουμε ένα app το οποίο θα υλοποιεί στη ουσία τον εξομοιωτή synthesizer στη φορητή συσκευή μας για να μπορεί ο χρήστης να παίξει μουσική πατώντας με τα δάχτυλά του τα κουμπιά στην οθόνη αφής της συσκευής του. Αυτό έχει ιδιαίτερη σημασία, γιατί ο χρήστης εξομοιώνει στον απόλυτο βαθμό το «παίξιμο» ενός synthesizer, αφού καλείται να παίξει μουσική κάνοντας με τα δάχτυλά του ακριβώς τις ίδιες κινήσεις που θα έκανε έχοντας μπροστά του ένα πραγματικό synthesizer. Επιπρόσθετα, η ευαισθησία των σύγχρονων συσκευών μας επιτρέπει την πίεση πολλών σημείων της οθόνης ταυτόχρονα(ευαισθησία πολλών σημείων), δηλαδή ο χρήστης μπορεί να πατάει στην εφαρμογή μας πολλά πλήκτρα ταυτόχρονα και να 37
38 αναγνωρίζονται από το λειτουργικό της φορητής συσκευής του όλες οι ενέργειές του. Αυτό είναι ζωτικής σημασίας, μιας και στο «παίξιμο» των πραγματικών synthesizer οι μουσικοί για να παράγουν τους επιθυμητούς ήχους, πατούν πολλά πλήκτρα ταυτόχρονα. Άρα και πάλι έχουν απόλυτη εξομοίωση στο θέμα αυτό Piano Client(Android) Η ανάπτυξη του app για Android του Piano Client έγινε στην τελευταία έκδοση του Android Studio, σε γλώσσα Java. Ο κώδικας που χρησιμοποιήθηκε ήταν παρόμοιος με τις κατάλληλες τροποποιήσεις με αυτόν του Piano Client για λειτουργικά συστήματα Windows. Ωστόσο, έπρεπε να δημιουργηθεί και το κατάλληλο μανιφέστο(android Manifest), ώστε η εφαρμογή μας να λειτουργεί κανονικά και χωρίς σφάλματα στα λειτουργικά Android Το Interface του app Στο interface της εφαρμογής δεν εντοπίζονται διαφορές, πέρα από τις οπτικές(μορφοποίηση) στις λειτουργίες σε σχέση με την εφαρμογή client για Windows, εκτός από τον τρόπο λειτουργίας Socket που ενσωματώσαμε στο app μας. Στην περίπτωση των Windows, την IP του server και την πόρτα που θα χρησιμοποιούσαμε για την σύνδεση των 2 συσκευών μας τις προρυθμίζαμε μέσα από τον κώδικα της Client εφαρμογής. Στη περίπτωση του Android app μας, θα πρέπει να εισάγουμε την IP του server στο πεδίο dstaddress και τον αντίστοιχο αριθμό της πόρτας που θέλουμε να χρησιμοποιήσουμε στο πεδίο dstport. Τα δύο αυτά πεδία βρίσκονται στο πάνω μέρος του κύριου Screen της εφαρμογής μας. Όταν συμπληρώσουμε τα δύο πεδία με τους σωστούς αριθμούς, πατάμε το πλήκτρο Connect και αν υπάρξει σύνδεση παίρνουμε μήνυμα επιτυχημένης διασύνδεσης μόνο στην οθόνη του Server όπως ακριβώς γινόταν και στην σύνδεση μεταξύ συσκευών με λειτουργικό Windows, όπως περιγράφεται παραπάνω. Τέλος, να τονίσουμε ότι υπάρχει ένα επιπλέον πλήκτρο ON/OFF που αν πατηθεί ενεργοποιεί την λειτουργία αποστολής μηνυμάτων στον server ώστε να λειτουργεί κανονικά όπως και παραπάνω η λειτουργία Socket. Αν π.χ. το κουμπί είναι στην λειτουργία OFF o Client αναπαράγει κανονικά τους ήχους από τα πλήκτρα που πατιούνται στον ίδιο, όμως δεν αποστέλλονται μηνύματα στον Server με τα πλήκτρα που πατάει ο χρήστης στην φορητή συσκευή και όπως είναι φυσικό ο Server δεν αναπαράγει κανέναν ήχο. Η λειτουργία του πλήκτρου ON/OFF είναι στην επιλογή OFF by default. Παρακάτω βλέπετε το Interface του app που αναπτύξαμε: 38
39 3.6 Ένα χαρακτηριστικό παράδειγμα εφαρμογής του πακέτου μας Παρακάτω βλέπουμε τον παγκοσμίου φήμης Έλληνα συνθέτη Βαγγέλη Παπαθανασίου πριν αρκετά χρόνια, να χρησιμοποιεί στο στούντιό του πολλά συνθεσάιζερ μαζί, για να ηχογραφήσει τον υψηλής ποιότητας χαρακτηριστικό ήχο του. 39
40 Πλέον, με εφαρμογές σαν αυτές που αναπτύξαμε, μπορούμε να συνδέσουμε συσκευές μεταξύ τους που είναι πολύ λεπτότερες σε σχέση με τα synthesizer που βλέπουμε παραπάνω, πολύ φθηνότερες, με μικρή κατανάλωση ενέργειας και με τέτοια ευαισθησία στις οθόνες αφής τους, ώστε μπορούν να αναγνωρίζουν ακόμα και την επαφή του ανθρώπινου χεριού με την οθόνη σε 8 έως 10 διαφορετικά σημεία. Το τελευταίο είναι πολύ σημαντικό, διότι μπορούν να προσομοιώσουν πολύ ρεαλιστικά ένα synthesizer, αφού ο χρήστης μπορεί να πιέζει τα πλήκτρα του εικονικού πληκτρολογίου με όλα τα δάχτυλα των χεριών, όπως ένας μουσικός που παίζει μουσική σε ένα πραγματικό synthesizer. Μερικές χαρακτηριστικού τύπου συσκευές είναι οι παρακάτω: 40
41 Έτσι, ο μεγάλος Έλληνας συνθέτης θα μπορούσε να έχει μπροστά του μια διάταξη σαν την παρακάτω, έχοντας παράλληλα όλα τα πλεονεκτήματα που προαναφέραμε παραπάνω: Σε αυτήν παρατηρούμε ότι χρειαζόμαστε 3 Android συσκευές και 2 ηλεκτρονικούς υπολογιστές με λειτουργικό Windows και οθόνη αφής. Έτσι, παρέχουμε 4 synthesizer στο μουσικό/ερευνητή. Επίσης, μπορούμε να προσθέσουμε μια κονσόλα παραμετροποίησης του ήχου που εξάγουν οι υπόλοιπες συσκευές(εύκολα βρίσκει κάποιος μία εφαρμογή λογισμικού ανοιχτού κώδικα που να την υλοποιεί). Κάθε συσκευή ενώνεται ασύρματα, πράγμα σημαντικό, αφού πλέον γλιτώνουμε από την πληθώρα καλωδίων που είναι απαραίτητα και εγκαταλείπουμε τεχνολογίες που θεωρούνται παρωχημένες, όπως π.χ. το πρωτόκολλο MIDI. Ακόμη, μπορούμε να ρυθμίσουμε πολλαπλά κάθε εξομοιωτή μας, ως προς το όργανο που θα παίζει. Τέλος, να σημειωθεί ότι μια διάταξη σαν αυτή που παρουσιάζουμε θα περιόριζε σημαντικά το κόστος κτήσης των απαραίτητων συσκευών για την παραγωγή ήχου σε επίπεδα χαμηλότερα ενός μόνο καλού synthesizer, δηλαδή είναι πλέον αυξημένη η προσιτότητα για τον καθημερινό χρήστη. 41
42 ΚΕΦΑΛΑΙΟ 4 Μικροτονική, Βυζαντινή Μουσική, Παραδοσιακά όργανα 4.1 Κλίμακα Είδαμε λοιπόν ως τώρα ένα μουσικό πιάνο που σου επιτρέπει να μπορείς να παίζεις μουσική χωρίς να έχεις κάποιο μουσικό όργανο και επίσης να υπάρξει μια επικοινωνία με κάποιο άλλο μουσικό όργανο ή και κάποια ηχογράφηση μέσω ενός pc χωρίς να πρέπει να συνδέσεις το μουσικό σου όργανο με καλώδια σε στο pc ή κάπου αλλού. Το πιάνο αυτό όμως βασίζεται στα Ευρωπαϊκά πρότυπα μουσικής και χρησιμοποιεί τις ευρωπαϊκές κλίμακες. ΟΡΙΣΜΟΣ: Λέγοντας Κλίμακα [<αρχ. κλῖμαξ < κλίνω] ή Σκάλα, εννοούμε μία σειρά από μουσικούς ήχους-νότες που ο αριθμός τους ποικίλει από κλίμακα σε κλίμακα, και την οποία χρησιμοποιούν οι μουσικοί κάθε λαού ως βάση για την δημιουργία της μουσικής και των τραγουδιών τους. Οι νότες κάθε μουσικής κλίμακας, έχουν ένα συγκεκριμένο τρόπο διάταξης μέσα σ' αυτήν και όταν λέμε διάταξη αναφερόμαστε κυρίως στις ηχητικές αποστάσεις που απέχουν οι νότες αυτές μεταξύ τους. Υπήρξαν και υπάρχουν πολυάριθμες και διαφορετικές μεταξύ τους ως προς την διάταξη κλίμακες, που κάθε δημιουργός-λαός τις ονομάζει με έναν δικό του τρόπο: Οι αρχαίοι Έλληνες για παράδειγμα, ονόμαζαν γενικά τις κλίμακες ως τρόπους και σε κάθε τρόπο έδιναν ανάλογα με την διάταξή του και ένα διαφορετικό όνομα, 42
43 παρμένο από τόπους και λαούς που τους πρωτο-χρησιμοποίησαν. Υπήρξε έτσι, ο "Δώριος ή Δωρικός" τρόπος, ο "Λύδιος", ο "Φρύγιος" κ.ά. Οι Έλληνες του Πόντου ονομάζουν τις κλίμακες σκοπούς. Οι Άραβες ονομάζουν τις κλίμακες τους ως μακάμ και έτσι ακριβώς τις έλεγαν οι παλιοί Έλληνες μουσικοί, μέχρι τα πρώτα χρόνια που διαμορφώθηκε η έννοια του ρεμπέτικου τραγουδιού οπότε και οι κλίμακες άρχισαν να ονομάζονται με το ελληνικό, δρόμοι. Οι Βυζαντινοί ονόμαζαν τις δικές τους μουσικές κλίμακες ως ήχους και τις χώριζαν σε "κύριους ήχους" και "πλάγιους ήχους". Η ηχητική απόσταση ανάμεσα στον πρώτο και τον τελευταίο ήχο/νότα μιας οκτάφθογγης κλίμακας, ονομάζεται οκτάβα. Στην ευρωπαϊκή μουσική, το μικρότερο δομικό υλικό χτισίματος της μουσικής, η μικρότερη ηχητική απόσταση που μπορεί να έχουν δύο νότες μεταξύ τους, είναι το Ημιτόνιο. Για να γίνει αντιληπτή και οπτικά η απόσταση αυτή, αρκεί να κοιτάξουμε το πιάνο της εικόνας: Κάθε απόσταση ανάμεσα σε δύο λευκά που τα χωρίζει μαύρο πλήκτρο είναι ένας τόνος. Κάθε απόσταση ανάμεσα σε δύο λευκά πλήκτρα που δεν τα χωρίζει μαύρο πλήκτρο, είναι ένα ημιτόνιο. π.χ. ημιτόνιο είναι η απόσταση ανάμεσα στο Φα# και το Σολ, αλλά και η απόσταση ανάμεσα στα Μι και Φα. Είναι φανερό ότι μία οκτάβα (η απόστασή της επισημαίνεται και στην εικόνα) περιέχει 12 ημιτόνια, χρειάζονται δηλ. 12 ηχητικά βήματα για να καλύψουμε την απόσταση αυτή. 43
Ειδικά Θέματα Προγραμματισμού
Ειδικά Θέματα Προγραμματισμού Ενότητα 11: Sockets Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
{ πρωτόκολλο, τοπική-διεύθυνση, τοπική-διεργασία, απομακρυσμένη-διεύθυνση, απομακρυσμένη-διεργασία }
11.2 Sockets 11.2.1 Το μοντέλο Client - Server και μερικοί ορισμοί Το ευρύτερα διαδεδομένο μοντέλο ανάπτυξης δικτυακών εφαρμογών είναι το μοντέλο του πελάτη - εξυπηρετητή ( client - server ). Ο εξυπηρετητής
14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης
14. Δικτύωση με Java Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να δημιουργείτε έναν ελάχιστο εξυπηρέτη TCP/IP σε Java Να δημιουργείτε έναν ελάχιστο εξυπηρετούμενο TCP/IP σε Java Να κατανοείτε πώς υλοποιούνται
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 23: Εισαγωγή στην Δικτύωση (Networking) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Διευθύνσεις και Θύρες - Sockets και ServerSockets Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής
ιαδικτυακές Εφαρµογές
ιαδικτυακές Εφαρµογές µε Java2 Στοιχεία ικτυακής Επικοινωνίας Όροι IP address 32bit αριθµός που χρησιµοποιείται από το Internet Protocol για την παράδοση δεδοµένων στο σωστό υπολογιστή στο δίκτυο. Port
Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα
Η Υλοποίηση της Επικοινωνίας στα Κατανεµηµένα Συστήµατα ιαφάνειες στα πλαίσια του µαθήµατος: Κατανεµηµένα Συστήµατα Ε Εξάµηνο, Τµήµα Πληροφορικής και Τεχνολογίας Υπολογιστών, ΤΕΙ Λαµίας Πέτρος Λάµψας 2002
ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη
ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο 2012-2013 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη Project 2012-2013 Υλοποίηση ενός chat server-client Παράδοση: 7/2/2013
Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap
Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap Version 2.00 Επιμέλεια Σημειώσεων: Δημήτρης Κόγιας Πατρικάκης Χαράλαμπος Πίνακας περιεχομένων TELNET... 2 PING...
(C) 2010 Pearson Education, Inc. All rights reserved.
Connectionless transmission with datagrams. Connection-oriented transmission is like the telephone system You dial and are given a connection to the telephone of fthe person with whom you wish to communicate.
ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java
ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java Java Media Framework Ηβιβλιοθήκη JMF Εγκαθίσταται επιπρόσθετα στη Java Αναπαραγωγή πολυµέσων Αποστολή και λήψη πολυµέσων σε πραγµατικό χρόνο Γραφικά αντικείµενα
Πρωτόκολλα Διαδικτύου
Πρωτόκολλα Διαδικτύου Μέρος 1ο Επικοινωνίες Δεδομένων Μάθημα 3 ο Εισαγωγή στην Τεχνολογία TCP/IP To TCP/IP σημαίνει Transmission Control Protocol / Internet Protocol και θα μπορούσε να θεωρηθεί ότι πρόκειται
ικτύωσησε Java Κατανεµηµένα Συστήµατα 08-1
ικτύωσησε Java ιευθύνσεις IP Υποδοχές ρεύµατος Σειριακοποίηση αντικειµένων Υποδοχές δεδοµενογραφηµάτων Υποδοχές πολυεκποµπής Οµοιόµορφοι Εντοπιστές Πόρων Κατανεµηµένα Συστήµατα 08-1 Υποδοχές σε C ικτύωσησε
Εργαστήριο Java. Αντικείµενο: Δίκτυα. Χειρισµός URLs. Άσκηση 1. Lab11. Πακέτο java.net
Εργαστήριο Java Lab11 Αντικείµενο: Δίκτυα Πακέτο java.net H Java παρέχει ένα σύνολο από ενσωµατωµένες δυνατότητες για δηµιουργία εφαρµογών στο Internet ή σε τοπικά δίκτυα. H Java παρέχει τα stream sockets
Πρωτόκολλα Επικοινωνίας και Τείχος Προστασίας
Β5.1.2 Πρωτόκολλα Επικοινωνίας και Τείχος Προστασίας Τι θα μάθουμε σήμερα: Να ορίζουμε τι είναι πρωτόκολλο επικοινωνίας Να εξηγούμε τη χρησιμότητα των πρωτοκόλλων επικοινωνίας Να ονομάζουμε τα σημαντικότερα
Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη
9.1 Γενικά Οι εφαρµογές που δηµιουργούνται από ένα προγραµµατιστή µπορούν ανά πασά στιγµή να καταρρεύσουν από κάποιο λάθος κατά την λειτουργία τους. Αυτές οι καταστάσεις συµβαίνουν από αµέλεια του προγραµµατιστή
Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών
Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών Χάρης Μανιφάβας Τμήμα Εφ. Πληροφορικής & Πολυμέσων ΤΕΙ Κρήτης Επικοινωνία -RPC 1 Υλοποίηση RPC Προκειμένου να επιτευχθεί διαφάνεια στην κλήση RPC,
Κεφάλαιο 7.3. Πρωτόκολλο TCP
Κεφάλαιο 7.3 Πρωτόκολλο TCP Πρωτόκολλο TCP Το πρωτόκολλο Ελέγχου Μετάδοσης (Transmission Control Protocol, TCP) είναι το βασικό πρωτόκολο του Επιπέδου Μεταφοράς του μοντέλου TCP/IP. Παρέχει υπηρεσίες προσανατολισμένες
Ως Διαδίκτυο (Internet) ορίζεται το παγκόσμιο (διεθνές) δίκτυο ηλεκτρονικών υπολογιστών (international network).
ΙΔΡΥΜΑ ΝΕΟΛΑΙΑΣ ΚΑΙ ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗΣ ΥΠΗΡΕΣΙΕΣ ΔΙΑΔΙΚΤΥΟΥ Καλαμάτα, 2015 Το Διαδίκτυο Ως Διαδίκτυο (Internet) ορίζεται το παγκόσμιο (διεθνές) δίκτυο ηλεκτρονικών υπολογιστών (international network). Πρόκειται
Αναπαραγωγή και stop/pause έτοιμων ηχητικών clips
Αναπαραγωγή και stop/pause έτοιμων ηχητικών clips Το scratch διαθέτει αρκετά μεγάλη ποικιλία έτοιμων ενσωματωμένων ηχητικών clips τα οποία θα βρείτε πολύ ενδιαφέροντα και θα σας βάλουν σε πειρασμό να πειραματιστείτε
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 12 Ροές και είσοδος/έξοδος αρχείων Τα δεδομένα εισόδου
Με λίγα λόγια, το TCP/IP καθορίζει τον τρόπο που πακετάρονται και μεταφέρονται τα δεδομένα της σύνδεσής μας.
Γρήγορο Ίντερνετ με Κατάλληλες Ρυθμίσεις TCP/IP Η ταχύτητά μας στο ίντερνετ εξαρτάται από πολλούς παράγοντες, όπου τον κεντρικό ρόλο παίζει η σύνδεσή μας. Πολλές φορές, όμως, η σύνδεσή μας μπορεί να περιορίζεται
Αντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 11: Χειρισμός Σφαλμάτων Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Γενικά (για τις γραπτές εξετάσεις)
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #12 η : Επανάληψη Γαβαλάς Δαμιανός dgavalas@aegean.gr Γενικά (για τις γραπτές εξετάσεις) Δεν υπάρχει αυστηρά ορισμένη «ύλη εξετάσεων» (καθώς δεν έχετε
Γενικές Αρχές. Τεχνολογία ικτύων Επικοινωνιών ΙΙ
Τεχνολογία ικτύων Επικοινωνιών ΙΙ 7.1.1. Γενικές Αρχές 1. Τι ονοµάζεται επικοινωνιακό υποδίκτυο και ποιο είναι το έργο του; Το σύνολο όλων των ενδιάµεσων κόµβων που εξασφαλίζουν την επικοινωνία µεταξύ
Πρωτόκολλα Διαδικτύου
Πρωτόκολλα Διαδικτύου Ερωτήσεις Ασκήσεις Επικοινωνίες Δεδομένων Μάθημα 3 ο Ερωτήσεις 1. Τι είναι το intranet και ποια τα πλεονεκτήματα που προσφέρει; 2. Τι δηλώνει ο όρος «TCP/IP»; 3. Να αναφέρετε τα πρωτόκολλα
Τετράδια Κιθάρας. Χρήση του PowerTab
Τετράδια Κιθάρας Extra ενότητα Χρήση του PowerTab Ευγένιος Αστέρις 1 Περιεχόμενα Πρόλογος... 3 Εγκατάσταση του Power Tab... 4 Εισαγωγή ενός αρχείου midi στο Power Tab... 5 Μελέτη με το Power Tab... 9 Εξήγηση
7.5 Πρωτόκολλο IP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ
Τεχνολογία ικτύων Επικοινωνιών ΙΙ 7.5 Πρωτόκολλο IP 38. Τι είναι το πρωτόκολλο ιαδικτύου (Internet Protocol, IP); Είναι το βασικό πρωτόκολλο του επιπέδου δικτύου της τεχνολογίας TCP/IP. Βασίζεται στα αυτοδύναµα
Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής
Επίπεδο Μεταφοράς (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών 2014-2015 Τμήμα Μηχανικών Η/Υ και Πληροφορικής Επίπεδο Μεταφοράς(Transport layer) Επίπεδο εφαρμογής (Application layer): Συντονισμός
ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP
ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP Το FTP (File Transfer Protocol) είναι το εξειδικευμένο πρωτόκολλο μεταφοράς αρχείων στα σύγχρονα δίκτυα δεδομένων όπως το Διαδίκτυο. Δίνει τη δυνατότητα μεταφοράς αρχείων από τον υπολογιστή
Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol
HTTP Protocol Web and HTTP Βασικά Συστατικά: Web Server Web Browser HTTP Protocol Web Servers (1/2) Ένα πρόγραμμα (λογισμικό) που έχει εγκατασταθεί σε ένα υπολογιστικό σύστημα (έναν ή περισσότερους υπολογιστές)
ΚΟΙΝΩΝΙΚΗ ΔΙΚΤΥΩΣΗ ΜΕΣΩ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ: ΧΡΗΣΗ ΔΕΚΤΗ GPS ΓΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΚΟΙΝΩΝΙΚΗΣ ΔΙΚΤΥΩΣΗΣ ΣΕ ΚΙΝΗΤΗ ΣΥΣΚΕΥΗ
ΚΟΙΝΩΝΙΚΗ ΔΙΚΤΥΩΣΗ ΜΕΣΩ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ: ΧΡΗΣΗ ΔΕΚΤΗ GPS ΓΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΚΟΙΝΩΝΙΚΗΣ ΔΙΚΤΥΩΣΗΣ ΣΕ ΚΙΝΗΤΗ ΣΥΣΚΕΥΗ Χαρίτων Ευσταθιάδης Σοφία Γεωργιάδου Πανεπιστήμιο Κύπρου Τμήμα Πληροφορικής ΕΠΛ 425
Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο
Αρχές Δικτύων Επικοινωνιών Επικοινωνίες Δεδομένων Μάθημα 4 ο Τα επικοινωνιακά δίκτυα και οι ανάγκες που εξυπηρετούν Για την επικοινωνία δύο συσκευών απαιτείται να υπάρχει μεταξύ τους σύνδεση από σημείο
ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C
ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει
άσκηση Hide UI Elements 7.2 Try and Catch
7.1 Hide UI Elements Στο Android Studio όταν θέλουμε να κρύψουμε οτιδήποτε (κάποιο Button, ένα TextView, ένα ImageView κλπ) μπορούμε να χρησιμοποιήσουμε την παρακάτω εντολή: setvisibility(view.invisible)
ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης
Σελίδα 1από ΤΕΙ ΚΑΒΑΛΑΣ Πτυχιακή εργασία Δικτυακή Εφαρμογή διαχείρισης ηλεκτρονικών εγγράφων υπηρεσίας. ΕΙΣΑΓΩΓΗ Μιλτιάδης Κακλαμάνης Σελίδα 2από Κατάλογος περιεχομένων ΕΙΣΑΓΩΓΗ...1 Σχετιζόμενα πρόσωπα...3
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός
Αντικειµενοστρεφής Προγραµµατισµός
16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C
ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον
Α2. Να γράψετε τους αριθμούς 1-5 από τη Στήλη Α και δίπλα το γράμμα της Στήλης Β που δίνει τη σωστή αντιστοίχηση.
ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ / Γ- ΕΠΑ.Λ. ΗΜΕΡΟΜΗΝΙΑ: 21-02- 2016 ΕΠΙΜΕΛΕΙΑ ΔΙΑΓΩΝΙΣΜΑΤΟΣ: Ι. ΜΙΧΑΛΕΑΚΟΣ-Α.ΚΑΤΡΑΚΗ ΘΕΜΑ Α. A1. Να γράψετε το γράμμα καθεμιάς από τις παρακάτω προτάσεις και δίπλα τη
Κατανεμημένα Συστήματα
Κατανεμημένα Συστήματα Java Sockets, Threads, Ασκήσεις Χρήστος Γκουμόπουλος Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων SOCKETS 2 Διαδιεργασιακή επικοινωνία με Sockets
Κέντρο υποστήριξης HP. Εισαγωγή. Τι χρειάζεται να γνωρίζετε. Λήψη και εγκατάσταση της λύσης Vista στα Windows 8. 1 of 5 1/7/2014 2:09 μμ
http://h2056wwwhp.com/portal/site/hpsc/template.page/public/psi... 1 of 5 1/7/2014 2:09 μμ Για το σπίτι Για την επιχείρηση Υποστήριξη Είσοδος Εγγραφή Βοήθεια ιστότοπου HP Color LaserJet 3600 Printer series
WiFi V-Timer ΕΚΔΟΣΗ 2Η
ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ WiFi V-Timer ΕΚΔΟΣΗ 2Η 1 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΓΝΩΡΙΜΙΑ ΜΕ ΤΟ WiFi V-Timer... 3 2. ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΤΟΥ WiFi V-Timer... 4 3. ΤΟΠΙΚΟΣ ΧΕΙΡΙΣΜΟΣ ΤΟΥ WiFi V-Timer... 5 4. ΕΓΚΑΤΑΣΤΑΣΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ
Κατανεμημένα Συστήματα
Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,
Οδηγίες αξιοποίησης για τον Εκπαιδευτικό
Ανάδοχοι Φορέας Υλοποίησης Έργο ΛΑΕΡΤΗΣ Λογισμικό Δικτύων Οδηγίες αξιοποίησης για τον Εκπαιδευτικό Ερευνητικό Ακαδημαϊκό Ινστιτούτο Τεχνολογίας Υπολογιστών Ανάδοχος φορέας: CONCEPTUM A.E. 1 Προσομοίωση
ΕΠΙΚΟΙΝΩΝΙΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΕΣ INTERNET
ΕΠΙΚΟΙΝΩΝΙΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΕΣ INTERNET Κεφάλαιο 4: Τεχνικές Μετάδοσης ΜΕΤΑΓΩΓΗ Τεχνική µεταγωγής ονομάζεται ο τρόπος µε τον οποίο αποκαθίσταται η επικοινωνία ανάµεσα σε δύο κόµβους με σκοπό την
7.2.2 Σχέση OSI και TCP/IP
Κεφάλαιο 7 7.2.2 Σχέση OSI και TCP/IP Σελ. 226-230 Γεώργιος Γιαννόπουλος ΠΕ19, ggiannop (at) sch.gr ΕΣΠΕΡΙΝΟ ΕΠΑΛ Κομοτηνής http://diktya-epal-g.ggia.info/ Γνωστό μοντέλο OSI διασύνδεσης ανοικτών συστημάτων.
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος
Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές
Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές Λαμπαδαρίδης Αντώνιος el04148@mail.ntua.gr Διπλωματική εργασία στο Εργαστήριο Συστημάτων Βάσεων Γνώσεων και Δεδομένων Επιβλέπων: Καθηγητής Τ. Σελλής Περίληψη
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 3 ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι. Ελεγκτές συνθηκών ή περιπτώσεων:
Κεφάλαιο 7 Διαδικτύωση-Internet. 7.2 Τεχνολογία TCP/IP
Κεφάλαιο 7 Διαδικτύωση-Internet 7.2 Τεχνολογία TCP/IP Τι δηλώνει ο όρος «TCP/IP»; Ο όρος TCP/IP αναφέρεται σε μια ομάδα ομοειδών πρωτοκόλλων που χρησιμοποιούνται για την επικοινωνία των δικτύων υπολογιστών
Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14
Οδηγός γρήγορης εγκατάστασης (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14 Περιεχόμενα συσκευασίας 1 Εισαγωγή στο υλικό Εξωτερική περιγραφή ΔΙΑΦΟΡΕΣ Μοντέλο
Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο
Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο Πρωτόκολλα και Αρχιτεκτονική Δικτύου Για να ανταλλάξουν δεδομένα δύο σταθμοί, εκτός από την ύπαρξη διαδρομής μεταξύ
Ειδικά Θέματα Προγραμματισμού
Ειδικά Θέματα Προγραμματισμού Ενότητα 6: Threads Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό
Κατανεμημένα Συστήματα. Javascript LCR example
Κατανεμημένα Συστήματα Javascript LCR example Javascript JavaScript All JavaScript is the scripting language of the Web. modern HTML pages are using JavaScript to add functionality, validate input, communicate
Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα
ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων
Interfox.gr. Κωδικοποίηση Κάμερας
Κωδικοποίηση Κάμερας 1. Κατεβάζουμε την εφαρμογή yoosee από το App store (IOS) ή από την σελίδα www.yoosee.co (Android) 2. Κάνουμε register με χρήση του e-mail μας και με εναν κωδικό. Θα εμφανιστεί μήνυμα
Δημιουργία μιας εφαρμογής Java με το NetBeans
Δημιουργία μιας εφαρμογής Java με το NetBeans Για να δημιουργήσετε μια εφαρμογή Java πρέπει να ακολουθήσετε τα εξής βήματα : Αρχικά πρέπει να δημιουργηθεί ένα project το οποίο θα περιέχει όλα τα αρχεία
Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10
Περιεχόμενα Εισαγωγή στην εφαρμογή... 2 Βασική Σελίδα (Activity)... 3 Ρυθμίσεις... 3 Πελάτες... 6 Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Αποθήκη... 11 Αναζήτηση προϊόντος...
HY335 4ο Φροντιστήριο
HY335 4ο Φροντιστήριο Δημιουργία ενός τοπικού δικτύου και επίδειξη προγραμμάτων τύπου client / server για TCP και UDP Fontas Fafoutis Ilias Tsompanidis Δημιουργία
Εισαγωγή στον Κατανεμημένο Προγραμματισμό
Εισαγωγή στον Κατανεμημένο Προγραμματισμό Περιεχόμενα Βασικές γνώσεις υποδοχών δικτύων Ιστορία του κατανεμημένου προγραμματισμού Εξέλιξη των πλαισίων ανάπτυξης επιχειρηματικών εφαρμογών Βασικές γνώσεις
Δίκτυα Υπολογιστών. Δίκτυα υπολογιστών και το Διαδίκτυο Εισαγωγή. Κ. Βασιλάκης
Δίκτυα Υπολογιστών Δίκτυα υπολογιστών και το Διαδίκτυο Εισαγωγή Κ. Βασιλάκης Περίγραμμα Τι είναι το διαδίκτυο Στοιχεία που το συνθέτουν Τρόποι παροχής υπηρεσιών Τι είναι τα πρωτόκολλα Τα άκρα του δικτύου
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες
SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ
Κεφάλαιο 4 SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ 1 4.1 ΕΙΣΑΓΩΓΗ...3 4.2 ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ...3 4.2.1 Η ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΗΣ ΔΙΑΧΕΙΡΙΣΗΣ ΔΙΚΤΥΟΥ...3 4.2.1.1 ΣΤΑΘΜΟΣ ΔΙΑΧΕΙΡΙΣΗΣ ΔΙΚΤΥΟΥ...4 4.2.1.2 ΔΙΑΧΕΙΡΙΖΟΜΕΝΟΙ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΓΙΑ ΤΟΝ ΕΛΕΓΧΟ ΤΩΝ HX-GO02 & HX-GO1
ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΓΙΑ ΤΟΝ ΕΛΕΓΧΟ ΤΩΝ HX-GO02 & HX-GO1 ΜΕΣΩ ΕΦΑΡΜΟΓΗΣ ΓΙΑ SMART PHONES 1 Αναζητήστε στο Google Play ή στο App Store την εφαρμογή ΗΧ-GO2 και εγκαταστήστε την στο κινητό σας (με λειτουργικό Android
ΥΛΟΠΟΙΗΣΗ ΠΡΟΤΥΠΩΝ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΤΗ ΒΙΒΛΙΟΘΗΚΗ JAVA.NET ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΥ ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΟΥ ΤΕΕ
3 Ο ΣΥΝΕΔΡΙΟ ΣΤΗ ΣΥΡΟ-ΤΠΕ ΣΤΗΝ ΕΚΠΑΙΔΕΥΣΗ 145 ΥΛΟΠΟΙΗΣΗ ΠΡΟΤΥΠΩΝ ΕΠΙΚΟΙΝΩΝΙΑΣ ΜΕ ΤΗ ΒΙΒΛΙΟΘΗΚΗ JAVA.NET ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΥ ΚΥΚΛΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΟΥ ΤΕΕ Βραχνός Ευριπίδης Καθηγητής
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input
2.1 Αντικειµενοστρεφής προγραµµατισµός
2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί
Εργαστήριο 1-1 η Άσκηση - Ανάλυση
Εργαστήριο 1-1 η Άσκηση - Ανάλυση Εκφώνηση: Δημιουργείστε εφαρμογή σε Java Swing με χρήση του IDE NetBeans όπου θα παρουσιάζεται ποιο κουμπί πατήθηκε. Η εφαρμογή θα μοιάζει ως εξής: Πρώτο Βήμα: Αρχική
Εφαρμογές Σειριακής Επικοινωνίας
Εφαρμογές Σειριακής Επικοινωνίας Εισαγωγή Στο μάθημα αυτό θα μάθουμε πώς να χρησιμοποιούμε την βιβλιοθήκη serial για την επικοινωνία από την πλατφόρμα Arduino πίσω στον υπολογιστή μέσω της θύρας usb. Τι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
ANDROID Προγραμματισμός Εφαρμογών
ANDROID Προγραμματισμός Εφαρμογών Παναγιώτης Κρητιώτης ΑΜ 1607 Περιεχόμενα Εισαγωγή Βασικά Στοιχεία Χαρακτηριστικά Αρχιτεκτονική Εργαλεία Προγραμματισμού Eclipse IDE Android SDK - ADT Plugin Προσομοιωτής
Πρωτόκολλα Διαδικτύου Μέρος 2ο. Επικοινωνίες Δεδομένων Μάθημα 3 ο
Πρωτόκολλα Διαδικτύου Μέρος 2ο Επικοινωνίες Δεδομένων Μάθημα 3 ο Internet Protocol (IP) Στο επίπεδο δικτύου της τεχνολογίας TCP/IP, συναντάμε το πρωτόκολλο IP. Η λειτουργία του IP βασίζεται αποκλειστικά
Λειτουργικά Συστήματα
Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:09 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών
Ethernet Ethernet ΙΕΕΕ CSMA/CD
Ethernet Τα τοπικά δίκτυα είναι συνήθως τύπου Ethernet ή λέμε ότι ακολουθούν το πρότυπο ΙΕΕΕ 802.3 Ακολουθούν το μηχανισμό CSMA/CD (Πολλαπλή πρόσβαση με Ακρόαση Φέροντος και Ανίχνευση Συγκρούσεων). Πολλαπλή
//στο pin 3 του μικροελεγκτή συνδέουμε το control pin του ρελέ. WRITE 'I am on' στο SOCKET // λέω στον client ότι άναψα τη λάμπα
//server's pseudocode (φορτωμένος στην Arduino's flash) //αρχικό σετάρισμα SET IP=192.168.10.253; OPEN_SOCKET_WITH_ADRESS( IP, 5000) ; //σερβίρω τα requests που δέχομαι από τον client WHILE (TRUE) { if
Λειτουργικά Συστήματα (Λ/Σ)
Λειτουργικά Συστήματα (Λ/Σ) Βασικές Έννοιες Λειτουργικών Συστημάτων Βασίλης Σακκάς 13/11/2013 1 ΒασικέςΈννοιεςΛ/Σ Η επικοινωνία μεταξύ Λ/Σ και των προγραμμάτων του χρήστη γίνεται μέσω του συνόλου των «εκτεταμένων
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;
Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class
Προγραμματισμός με BSD Sockets σε περιβάλλον Linux
Προγραμματισμός με BSD Sockets σε περιβάλλον Linux Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Απρίλιος 2016 Περίγραμμα παρουσίασης 1 Εισαγωγή 2 Δικτυακά
Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγραμματισμό Ακαδημαϊκό έτος 2010/2011 Επιμέλεια Ξενοφών Βασιλάκος Περιεχόμενα Φροντιστηρίου A. Πρωταρχικοί τύποι B. Είσοδος/ Έξοδος C. Πράξεις 2 Δήλωση / Αρχικοποίηση / Εκχώρηση A. Πρωταρχικοί
Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals
Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1 UDP vs TCP Το UDP είναι ένα connectionless, μη αξιόπιστο,
Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy
Σ ε λ ί δ α 1 Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy Περιεχόμενα 1. Download Arebas Easy... 2 2. Εγκατάσταση Arebas Easy... 3 3. Εγγραφή στον Arebas Server... 7 4. Παραμετροποίηση Arebas Easy...
Τι είναι το πρωτόκολλο Διαδικτύου (Internet Protocol, IP);
7.5. Πρωτόκολλο IP Τι είναι το πρωτόκολλο Διαδικτύου (Internet Protocol, IP); Είναι το βασικό πρωτόκολλο του επιπέδου δικτύου της τεχνολογίας TCP/IP. Βασίζεται στα αυτοδύναμα πακέτα που μεταφέρονται ανεξάρτητα
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΕΡΓΑΣΙΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ΛΟΓΙΣΜΙΚΟ EXTEND. 1 ο εργαστήριο Διοίκησης και Παραγωγής Έργων
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΕΡΓΑΣΙΩΝ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ΛΟΓΙΣΜΙΚΟ EXTEND 1 ο εργαστήριο Διοίκησης και Παραγωγής Έργων ΙΣΤΟΤΟΠΟΣ ΕΡΓΑΣΤΗΡΙΟΥ http://www.mech.upatras.gr/~adamides/dpe ΠΡΟΣΟΜΟΙΩΣΗ Η τεχνική
Εξοικείωση με τις εντολές ipconfig και ping
Διαχείριση Δικτύων Τμήμα Μηχανικών Πληροφορικής ΤΕ ΤΕΙ Ηπείρου Εργαστηριακή Άσκηση Εξοικείωση με τις εντολές ipconfig και ping Σημείωση : Η άσκηση αναφέρεται σε εντολές των Windows. Υπάρχουν παρόμοιες
Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων 2013-2014. Σωτήρης Γυφτόπουλος
Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων 2013-2014 Σωτήρης Γυφτόπουλος Κανόνες του Facility Game (1/4) Στο Facility Game υπάρχει ένα σύνολο κόμβων που συνδέονται «σειριακά» και κάθε κόμβος
Βασικές Υπηρεσίες Διαδικτύου. Επικοινωνίες Δεδομένων Μάθημα 2 ο
Βασικές Υπηρεσίες Διαδικτύου Επικοινωνίες Δεδομένων Μάθημα 2 ο Μεταφορά αρχείων (File Transfer Protocol, FTP) user at host FTP user interface FTP client local file system file transfer FTP server remote
Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0
Δομές Δεδομένων 5ο εξάμηνο Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse v1.0 Τις σημειώσεις κράτησαν και διαμόρφωσαν σε word οι: Κονδύλη Γαλήνη, ΑΜ 5576 Μάλλιου Χριστίνα, ΑΜ 5413
Διαχείριση Πληροφοριών στο Διαδίκτυο. Εργαστήριο 1
Διαχείριση Πληροφοριών στο Διαδίκτυο Εργαστήριο 1 Τεχνολογικό Εκπαιδευτικό Ίδρυμα Καβάλας Σχολή Διοίκησης & Οικονομίας Τμήμα Διαχείρισης Πληροφοριών Διδάσκων Μαρδύρης Βασίλειος, Διπλ. Ηλ. Μηχανικός & Μηχ.
Κλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ CD-PLUS/4+N
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ CD-PLUS/4+N ΜΕΘΟΔΟΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ : Με ΙΤ-4Ν Με τηλέφωνο συνδεδεμένο στις εξόδους τηλεφωνικής γραμμής του ΙΤ-4Ν. Μπείτε στο μενού προγραμματισμού. Αν έχετε μπουτονιέρα στο σύστημα, τοποθετείστε
1ο Φύλλο Εργασίας. της παλέτας Ήχος. Πώς μπορούμε να εισάγουμε και να αναπαράγουμε έναν ήχο;
1ο Φύλλο Εργασίας της παλέτας Ήχος Πώς μπορούμε να εισάγουμε και να αναπαράγουμε έναν ήχο; Για να εισάγουμε ένα ή περισσότερα μουσικά κλιπ σε ένα αντικείμενο, επιλέγουμε από το μεσαίο παράθυρο του Scratch
7.11 Πρωτόκολλα Εφαρµογής. 7.11.2 Βασικές και Προηγµένες Υπηρεσίες ιαδικτύου. Ηλεκτρονικό Ταχυδροµείο. Τεχνολογία ικτύων Επικοινωνιών ΙΙ
Τεχνολογία ικτύων Επικοινωνιών ΙΙ 7.11 Πρωτόκολλα Εφαρµογής 104. Αναφέρετε ονοµαστικά τις πιο χαρακτηριστικές εφαρµογές που υποστηρίζει η τεχνολογία TCP/IP οι οποίες είναι διαθέσιµες στο ιαδίκτυο 1. Ηλεκτρονικό
Βιντεοπροβολέας δικτύου - Οδηγός χρήσης
Βιντεοπροβολέας δικτύου - Οδηγός χρήσης Πίνακας περιεχομένων Προετοιμασία...3 Σύνδεση του βιντεοπροβολέα με τον υπολογιστή σας...3 Ενσύρματη σύνδεση... 3 Εξ αποστάσεως έλεγχος του βιντεοπροβολέα μέσω προγράμματος
Ενότητα 1η. Εισαγωγή στην Πληροφορική
Ενότητα 1η Εισαγωγή στην Πληροφορική 1.1 Τι είναι Πληροφορική Ένας σύντομος ορισμός για το τι είναι πληροφορική είναι ο παρακάτω: όλα εκείνα που χρειάζεται κανείς για να παράγει, να οργανώνει και να διαχειρίζεται
Λιβανός Γιώργος Εξάμηνο 2017Β
Λιβανός Γιώργος Εξάμηνο 2017Β Υπολογιστικό σύστημα Υλικό (hardware) Λογισμικό (Software) Ολοκληρωμένα κυκλώματα, δίσκοι, οθόνη, κλπ. Λογισμικό συστήματος Προγράμματα εφαρμογών Χρειάζονται ένα συντονιστή!!!
Προετοιμασία σύνδεσης του modem. Εγκατάσταση του Modem
ΕΓΚΑΤΑΣΤΑΣΗ ΣΥΝΔΕΣΗΣ DIAL-UP ΣΕ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ WINDOWS XP Διαδικασία δικτύωσης PC μέσω modem Στις επόμενες παραγράφους περιγράφεται αναλυτικά η διαδικασία που χρειάζεται να ακολουθήσετε προκειμένου
Αυτόνομοι Πράκτορες. ΝΑΟ Μουσικός
Αυτόνομοι Πράκτορες ΝΑΟ Μουσικός Καρατζαφέρης Ευστάθιος Αλέξανδρος 2007 030 046 Πολυτεχνείο Κρήτης Σύντομη Περιγραφή Στόχος της εργασίας μας είναι η υλοποίηση της συμπεριφοράς αλλα και της λειτουργικότητας