K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Podobne dokumenty
KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Programowanie współbieżne i rozproszone

Strumienie i serializacja

Platformy Programistyczne Zagadnienia sieciowe i wątki

Biblioteki wejścia/wyjścia. Strumienie we/wy (I/O)

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Wykład 4: Wejście/wyjście: strumienie Java

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Przykłady interfejsu TCP i UDP w Javie

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Adresy URL. Zaawansowane technologie Javy 2019

Wybrane działy Informatyki Stosowanej

Programowanie rozproszone w języku Java

Networking. Zaawansowane technologie Javy 2019

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

Komunikacja z użyciem gniazd aplikacje klient-serwer

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Gniazda komunikacji sieciowej w środowisku Java

Strumienie, pliki. Sortowanie. Wyjątki.

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie w języku Java

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

dr Krzysztof Podlaski

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej

JAVA I SIECI. MATERIAŁY:

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Zadanie 2: transakcyjny protokół SKJ (2015)

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

Programowanie Sieciowe 1

Strumienie, pliki. Sortowanie. Wyjątki.

Bezpieczne uruchamianie apletów wg

Stos protokołów TCP/IP (ang. Transmission Control Protocol/Internet Protocol)

URL. Budowa URL (ang. Uniform Resource Locator): working#downloading

Programowanie sieciowe

Programowanie obiektowe

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Klient-Serwer Komunikacja przy pomocy gniazd

Java programowanie sieciowe

Rozdział 7 Strumienie, operacje wejścia-wyjścia

Programowanie obiektowe

Wykład 10: Wejście i Wyjście

Java programowanie w sieci. java.net RMI

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe

1. Model klient-serwer

Protokoły sieciowe - TCP/IP

Model sieci OSI, protokoły sieciowe, adresy IP

Dr Michał Tanaś(

Java a dost p do Internetu.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Programowanie aplikacji w architekturze Klient-Serwer - UDP

Programowanie obiektowe

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Programowanie w języku Java WYKŁAD

Przesyłania danych przez protokół TCP/IP

Aplikacja wielowątkowa prosty komunikator

5. Model komunikujących się procesów, komunikaty

Java. Michał Wójcik.

TRX API opis funkcji interfejsu

Sieci komputerowe Warstwa transportowa

Podstawy i języki programowania

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie Obiektowe (Java)

Wykład 2. Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni poprzez sieć - obiekty URL

Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP.

Języki i metody programowania Java INF302W Wykład 4

Unicast jeden nadawca i jeden odbiorca Broadcast jeden nadawca przesyła do wszystkich Multicast jeden nadawca i wielu (podzbiór wszystkich) odbiorców

Sieci komputerowe - Protokoły warstwy transportowej

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ ADRESACJA W SIECIACH IP. WSTĘP DO SIECI INTERNET Kraków, dn. 24 października 2016r.

Przygotował: Jacek Sroka 1. Java SE. Strumienie

Wykład 6 Dziedziczenie cd., pliki

Biblioteka standardowa - operacje wejścia/wyjścia

Strumienie tekstowe (wprowadzanie danych z klawiatury) i bajtowe, otwieranie strumieni przez sieć - obiekty URL

Programowanie obiektowe

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

akademia androida Składowanie danych część VI

Bazy Danych i Usługi Sieciowe

Podstawowe protokoły transportowe stosowane w sieciach IP cz.1

Wywoływanie metod zdalnych

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

ARP Address Resolution Protocol (RFC 826)

Programowanie sieciowe

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Gniazda BSD implementacja w C#

Sieci Komputerowe Modele warstwowe sieci

Mechanizmy pracy równoległej. Jarosław Kuchta

Dr Michał Tanaś(

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

MODEL OSI A INTERNET

PROTOKOŁY WARSTWY TRANSPORTOWEJ

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Enkapsulacja RARP DANE TYP PREAMBUŁA SFD ADRES DOCELOWY ADRES ŹRÓDŁOWY TYP SUMA KONTROLNA 2 B 2 B 1 B 1 B 2 B N B N B N B N B Typ: 0x0835 Ramka RARP T

POŁĄCZENIE STEROWNIKÓW ASTRAADA ONE MIĘDZY SOBĄ Z WYKORZYSTANIEM PROTOKOŁU UDP. Sterowniki Astraada One wymieniają między sobą dane po UDP

Transkrypt:

Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska

Komunikacja międzyprocesowa 2 Podstawowe metody wymiany informacji między aplikacjami/procesami obejmują: Pliki Potoki nienazwane (ang. pipe) np. połączone z stdin/stdout/stderr Gniazda (ang. sockets) Oraz protokoły budowane na ich podstawie, np. HTTP Java oferuje zunifikowany model strumieni wejścia/wejścia do obsługi wielu źródeł danych ang. I/O streams nie mylić z API Stream

Strumienie wejścia/wyjścia 3 Strumienie bajtowe (ang. Byte Streams) odczyt/zapis bajtów InputStream (np. FileInputStream, AudioInputStream) OutputStream (np. FileOutputStream, ByteArrayOutputStream) Strumienie znakowe (ang. Character Streams) odczyt/zapis znaków Reader (np. FileReader, InputStreamReader), Writer Wykorzystują zestaw znaków Unicode do przechowywania znaków Automatyczna translacja znaków pomiędzy Unicode a lokalnym zbiorem znaków

Strumienie wejścia/wyjścia 4 Strumienie należy zamykać (metoda close()) po zakończeniu pracy z nimi Strumień może być powiązany z otwartym plikiem na dysku, gniazdem sieciowym itd. Brak zamknięcia strumienia skutkuje wiszącym połączeniem sieciowym, zablokowanym plikiem na dysku Nie należy polegać w tej kwestii na mechanizmie garbage collector Nie ma gwarancji co do momentu uruchomienia GC Nie ma gwarancji co do wywołania finalizatorów np. awaria aplikacji, zabicie procesu (SIGKILL) Zalecana konstrukcja try-with-resources (przykład w dalszej części)

Buforowanie 5 Poprawia wydajność komunikacji za pośrednictwem strumieni wejścia/wyjścia Redukcja liczby odwołań do pliku na dysku/gniazda sieciowego Byte Streams BufferedInputStream BufferedOutputStream Character Streams BufferedReader BufferedWriter Dekoratory dla podstawowych strumieni bajtowych i znakowych Metoda flush() wymusza zapisanie zawartości bufora

Dekorowanie strumieni 6 Podstawowy strumień: InputStream input = /*...*/; Z buforowaniem: BufferedInputStream buffered = new BufferedInputStream(input); Z buforowaniem i dekompresją: GZIPInputStream gzipstream = new GZIPInputStream(buffered); Z deserializacją obiektów: ObjectInputStream objectstream = new ObjectInputStream(gzipStream);

Strumień serializowanych obiektów 7 Java umożliwia binarną serializację obiektów W celu ich zapisu do pliku na dysku W celu ich przesłania przez sieć do innej aplikacji Binarna serializacja daje większą wydajność niż w przypadku użycia formatów tekstowych takich, jak JSON/XML/YAML ale wymaga Javy po stronie zapisującej oraz po stronie odczytującej

Serializacja 8 Klasy możliwe do zserializowania oznacza się interfejsem Serializable Interfejs znakujący nie posiada żadnych metod Wybrane pola klasy można pominąć w czasie serializacji modyfikator transient Różne wersje klasy można oznaczyć identyfikatorami: static final long serialversionuid = 17;

Serializacja strumienie obiektów 9 ObjectOutputStream: ObjectOutputStream objectout =... objectout.writeutf("imiesław"); objectout.writeint(20); Serializable dev = new Developer(); objectout.writeobject(dev); ObjectInputStream: ObjectInputStream objectin =... String name = objectin.readutf(); int age = objectin.readint(); Developer dev = (Developer) objectin.readobject();

Standardowe strumienie 10 stdin: System.in (InputStream) stdout: System.out (PrintStream) stderr: System.err (PrintStream)

11 Pliki i katalogi

Klasa File 12 Przed Javą SE7 podstawowa klasa do operacji na drzewie plików i katalogów Obiekty klasy File reprezentują zarówno pliki jak i katalogi W duchu UNIXowej idei: wszystko jest plikiem Udostępnia podstawowe informacje na temat elementów na dysku

Klasa File 13 Pozyskanie instancji: String path = "..."; File file = new File(path); Sprawdzenie typu: boolean isdirectory = file.isdirectory(); boolean isfile = file.isfile(); Czas modyfikacji: long lastmodifiedms = file.lastmodified(); Date lastmodified = new Date(lastModifiedMS); Zawartość katalogu (jeśli jest katalogiem, w przeciwnym razie null): File[] files = file.listfiles();

Wady klasy File 14 Wiele metod nie rzuca wyjątku w razie niepowodzenia np. boolean File.delete() Problemy z przenośnością metody rename() Brak obsługi dowiązań symbolicznych Ograniczony dostęp do metadanych np. właściciel pliku Problemy ze skalowalnością np. listowanie zawartości katalogu o dużej liczbie elementów

java.nio.files.* Path oraz Files 15 Nowe klasy narzędziowe wprowadzone w SE7 Rozwiązują problemy występujące w klasie File Path i Files zalecane do użycia w nowych projektach Path Reprezentuje lokalizację pliku/katalogu na dysku Z uwzględnieniem specyfiki systemu operacyjnego Paths.get("katalog", "plik.txt"); Implementuje interfejs Watchable Możliwość nasłuchiwania na zmiany, np. dodanie pliku w katalogu, usunięcie pliku, modyfikacja pliku Files Klasa narzędziowa oferująca metody statyczne do operacji na obiektach Path

Path i Files 16 Pozyskanie instancji: Path p = Paths.get("katalog", "plik.txt"); Sprawdzenie typu: boolean isdirectory = Files.isDirectory(p); boolean isfile = Files.isRegularFile(p); Zawartość katalogu: Stream<Path> paths = Files.list(p); Odroczone ładowanie (ang. lazily populated) rozwiązuje problem wydajności listowania dużych katalogów Usuwanie: Files.delete(p); Wyrzuca IOException w razie niepowodzenia

try-with-resources 17 Dysponując obiektem File/Path można otworzyć strumienie do wczytywania i zapisywania plików Strumienie należy zamykać po zakończeniu pracy z nimi W przeciwnym razie pozostaje wiszący uchwyt pliku/wiszące połączenie socketowe itd. Składnia try-with-resources umożliwia automatyczne zamykanie strumieni i innych zasobów Muszą implementować interfejs AutoCloseable

try-with-resources 18 Automatyczne zamykanie strumienia: try (BufferedReader reader = Files.newBufferedReader(path)) { String line = reader.readline(); //...przetwarzanie... } //automatyczne zamknięcie strumienia

19 Gniazda

Gniazdo (ang. socket) 20 Punkt końcowy w dwukierunkowej komunikacji pomiędzy dwoma programami działającymi w sieci (lub na lokalnym komputerze) Powiązane z konkretnym portem (1-65535) Serwer nasłuchuj na połączenia od klientów na określonym porcie Aplikacje klienckie łącząc się z serwerem specyfikują port Na jednym komputerze wiele aplikacji może równocześnie nasłuchiwać na różnych portach

Połączenia 21 TCP Transmission Control Protocol Połączeniowy Retransmisje Zachowana kolejność Potwierdzenia Wiarygodny UDP User Datagram Protocol Bezpołączeniowy Brak retransmisji Kolejność niezapewniona Brak potwierdzeń Niewiarygodny

Połączenia 22 Klasy umożliwiające połączenia: TCP (Transmission Control Protocol): URL URLConnection Socket ServerSocket UDP (User Datagram Protocol): DatagramPacket DatagramSocket MulticastSocket

Połączenie TCP 23 Serwer Nasłuchiwanie na wybranym porcie: new ServerSocket(int port) Akceptowanie połączenia z klientem (metoda blokująca): Socket ServerSocket.accept() Klient Połączenie z wybranym hostem na określonym porcie: new Socket(String host, int port) Obie strony OutputStream Socket.getOutputStream() InputStream Socket.getInputStream()

try-with-resources 24 Automatyczne zamykanie strumieni: Socket socket = new Socket("192.168.1.17", 1337); try(bufferedreader reader = Files.newBufferedReader(path); OutputStream output = socket.getoutputstream()) { String line = reader.readline(); //...przetwarzanie... output.write(/*...*/); } //automatyczne zamknięcie obu strumieni

Datagramy UDP 25 Niezależne, samodzielne wiadomości przesyłane przez sieć Brak gwarancji co do faktu dostarczenia, czasu dostarczenia czy integralności treści Główne klasy: DatagramSocket gniazdo datagramowe DatagramPacket pojedynczy pakiet MulticastSocket odbieranie pakietów wysłanych do grupy hostów InetAddress reprezentacja adresu protokołu IP

Przesyłanie datagramu 26 Serwer: Rozpoczęcie nasłuchiwania na określonym porcie: new DatagramSocket(int port) Odbieranie pakietu (blokujące): void DatagramSocket.receive(DatagramPacket p) Klient: Pozyskanie instancji gniazda: new DatagramSocket(); Nie wymaga adresu hosta ani portu adres w datagramie Konstrukcja pakietu datagramowego: new DatagramPacket(byte[] buff, int length, InetAddress address, int port), Wysyłanie pakietu: void DatagramSocket.send(DatagramPacket packet)

Multicast 27 Nadawca: Wysyłanie za pomocą DatagramSocket Konstrukcja adresu multicast (w zależności od maski podsieci): InetAddress.getByName("192.168.0.63") Odbiorcy: Rozpoczęcie nasłuchiwania na określonym porcie: new MulticastSocket(int port) Dołączenie do grupy multicast: MulticastSocket.joinGroup(InetAddress group) Host może być podłączony do kilku sieci Opuszczenie grupy: MulticastSocket.leaveGroup(InetAddress group) Odebranie pakietu: void MulticastSocket.receive(DatagramPacket p)

28 Pytania?