Java programowanie sieciowe



Podobne dokumenty
Adresy URL. Zaawansowane technologie Javy 2019

Networking. Zaawansowane technologie Javy 2019

Programowanie współbieżne i rozproszone

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

JAVA I SIECI. MATERIAŁY:

Platformy Programistyczne Zagadnienia sieciowe i wątki

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Programowanie rozproszone w języku Java

Programowanie w języku Java

Komunikacja z użyciem gniazd aplikacje klient-serwer

Java programowanie w sieci. java.net RMI

Wybrane działy Informatyki Stosowanej

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

Java a dost p do Internetu.

Przykłady interfejsu TCP i UDP w Javie

Programowanie sieciowe

Zadanie 2: transakcyjny protokół SKJ (2015)

Protokoły sieciowe - TCP/IP

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

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

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

Aplikacja wielowątkowa prosty komunikator

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

Podstawowe pojł cia. Czego sił nauczymy? Pojł cia hosta. Hosty Adresowanie Internetowe Porty Protokoóy

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

Model sieci OSI, protokoły sieciowe, adresy IP

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

Przesyłania danych przez protokół TCP/IP

Na podstawie: Kirch O., Dawson T. 2000: LINUX podręcznik administratora sieci. Wydawnictwo RM, Warszawa. FILTROWANIE IP

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

Aplikacja wielow tkowa prosty komunikator

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak

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

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

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

Zestaw ten opiera się na pakietach co oznacza, że dane podczas wysyłania są dzielone na niewielkie porcje. Wojciech Śleziak

Sieci komputerowe - administracja

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

Podstawy i języki programowania

Sieci komputerowe - Protokoły warstwy transportowej

Klient-Serwer Komunikacja przy pomocy gniazd

Zadania z sieci Rozwiązanie

Programowanie Sieciowe 1

Rok szkolny 2014/15 Sylwester Gieszczyk. Wymagania edukacyjne w technikum. SIECI KOMPUTEROWE kl. 2c

Wywoływanie metod zdalnych

Programowanie aplikacji w architekturze Klient-Serwer - UDP

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

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

TCP/IP. Warstwa aplikacji. mgr inż. Krzysztof Szałajko

Plan wykładu. 1. Sieć komputerowa 2. Rodzaje sieci 3. Topologie sieci 4. Karta sieciowa 5. Protokoły używane w sieciach LAN 6.

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

Sieci Komputerowe Modele warstwowe sieci

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

Wydział Informatyki, Elektroniki i Telekomunikacji Katedra Telekomunikacji

Serwer współbieżny połączeniowy

Warstwy i funkcje modelu ISO/OSI

Aplikacje RMI

1. Model klient-serwer

Strumienie i serializacja

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

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

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Podstawowe typy serwerów

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Mapa wykładu. 2.6 Poczta elektroniczna. 2.7 FTP 2.8 Dystrybucja zawartości. 2.9 Dzielenie plików P2P SMTP, POP3, IMAP

Adres IP

Programowanie sieciowe

MODEL OSI A INTERNET

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

Wywoływanie metod zdalnych

Protokoły wspomagające. Mikołaj Leszczuk

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

Dr Michał Tanaś(

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 14 Protokoły sieciowe

ZiMSK. Charakterystyka urządzeń sieciowych: Switch, Router, Firewall (v.2012) 1

Model warstwowy Warstwa fizyczna Warstwa łacza danych Warstwa sieciowa Warstwa transportowa Warstwa aplikacj. Protokoły sieciowe

Instrukcje dotyczące funkcji zarządzania pasmem w urządzeniach serii ZyWALL.

Sieci komputerowe. Wstęp

Programowanie aplikacji w architekturze Klient-Serwer - TCP

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

Moduł Ethernetowy. instrukcja obsługi. Spis treści

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Wybrane działy Informatyki Stosowanej

System operacyjny UNIX Internet. mgr Michał Popławski, WFAiIS

OBSŁUGA I KONFIGURACJA SIECI W WINDOWS

Serwery multimedialne RealNetworks

Sprawozdanie nr 4. Ewa Wojtanowska

Adresowanie grupowe. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 25 kwietnia 2006

Programowanie sieciowe

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Bazy Danych i Usługi Sieciowe

Protokoły internetowe

Gniazda komunikacji sieciowej w środowisku Java

Referencyjny model OSI. 3 listopada 2014 Mirosław Juszczak 37

Co w sieci piszczy? Programowanie aplikacji sieciowych w C#

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

Adresy w sieciach komputerowych

MASKI SIECIOWE W IPv4

Systemy operacyjne i sieci komputerowe Szymon Wilk Adresowanie w sieciach Klasy adresów IP a) klasa A

14. Komunikacja rozproszona gniazdka, RMI

Transkrypt:

Java programowanie sieciowe

Podstawowe pojęcia dotyczące sieci Sieć to zbiór komputerów i innych urządzeń, które mogą się ze sobą komunikować w czasie rzeczywistym za pomocą transmisji danych. Każda maszyna (komputer, ruter, drukarka, terminal) znajdująca się w sieci nazywa się węzłem. Węzły, które są w pełni funkcjonalnymi komputerami nazywane są hostami. Każdy węzeł w sieci ma swój adres.

Podstawowe pojęcia dotyczące sieci Wszystkie współczesne sieci komputerowe są sieciami komutacji pakietów. Każdy pakiet oprócz fragmentu danych zawiera informację o tym kto i dokąd go wysłał. Zestaw reguł według których komputery i urządzenia komunikują się ze sobą nazywa się protokołem.

Warstwy sieci Przesyłanie danych przez sieć to skomplikowana operacja logistyczna. warstwa aplikacji warstwa transportowa (TCP/UDP) warstwa internetowa (IP) Ścieżka logiczna Ścieżka fizyczna warstwa łącza warstwa aplikacji warstwa transportowa (TCP/UDP) warstwa internetowa (IP)

Warstwy sieci Warstwa łącza definiuje konkretny interfejs sieciowy i przesyła datagramy IP fizycznym łączem (do sieci lokalnej i w świat) Java nie ma dostępu do tej warstwy. Warstwa internetowa odpowiada za grupowanie danych w pakiety oraz za schemat adresowania, w którym różne maszyny mogą się odnaleźć Java zna tylko protokół IP dla tej warstwy (jest on najpowszechniej stosowany).

Warstwy sieci Warstwa transportowa odpowiada za to, aby pakiety były odbierane w tej samej kolejności w jakiej zostały wysłane, oraz aby żaden z nich nie został uszkodzony ani zagubiony Java umie obsłużyć dwa protokoły tej warstwy: TCP (ang. Transmission Control Protocol) niezawodny, UDP (ang. User Datagram Protocol) zawodny ale szybki. Warstwa aplikacji dostarcza dane użutkownikowi znane protokoły tej warstwy to HTTP, SMTP, POP, IMAP, FTP, NFS, NNTP oraz wiele innych.

Java a warstwy sieci W Javie aplikacje sieciowe mogą być tworzone w warstwie aplikacji bez konieczności obsługi warstw UDP/TCP Model odniesienia Warstwa aplikacji Warstwa Transportowa HTTP, FTP TCP, UDP Obsługa sieci w Java jest niezależna od platformy Warstwa Sieci Warstwa Łącza IP, ICMP, IGMP ARP, RARP

Adresy IP Protokół Internetu IP jest niezależny od platformy, automatycznie wyznacza trasę rutingu. Każdy komputer w sieci IP jest identyfikowany za pomocą swojego unikatowego 32-bitowego (IPv4) albo 128-bitowego (IPv6) adresu. DNS (ang. Domain Name System) to usługa, która tłumaczy nazwy mnemoniczne adresów na nazwy liczbowe. Pakiety, które przychodzą do określonego hosta mogą trafiać do różnych aplikacji czy serwisów dzięki portom. Jest ich 65535 dla protokołów TCP i UDP (porty 1-1023 są zarezerwowane dla usług standardowych).

port port port port port Porty Przeznaczenie danych w Internecie określane jest: adresem IP (32 bity), numerem portu (16 bitów). App App App App TCP lub UDP App Porty wykorzystywane są do kojarzenia aplikacji z danymi przychodzącymi na interfejs. payload port

Adresy IP W pakiecie java.net jest zdefiniowana klasa InetAddress, która reprezentuje adres IP. Klasa InetAddress ma dwie podklasy Inet4Address i Inet6Address reprezentujące odpowiednio adresy protokołu internetowego w standardach IPv4 i IPv6. Klasa ta jest wykorzystywana przez inne klasy sieciowe: URL, Socket, ServerSocket, DatagramSocket, DatagramPacket.

Adresy IP Klasa InetAddress pozwala tworzyć obiekty tych klas za pomocą metod statycznych: getbyaddress (byte[] addr) getbyname (String host) getlocalhost () Z obiektu InetAddress można wydobyć szczegółowe informacje o adresie IP za pomocą metod: gethostaddress () gethostname () getcanonicalhostname () tostring () isanylocaladdress () isreachable (int timeout)

Adres URL (1) URL (ang. Uniform Resource Locator) to referencja do zasobu w Internecie. URL składa się z nazwy protokołu i nazwy zasobu, na przykład: URL ul = new URL("http://www.koszalin.pl/"); Pełna nazwa zasobu może składać się z nazwy hosta, ścieżki, pliku, portu, referencji i zapytania.

Adres URL (2) Metody do parsowania URL: getprotocol(), getauthority(), gethost(), getport(), getpath(), getquery(), getfile(), getref() Otwieranie strumienia na URL: openstream() zwraca srumień we/wy Połączenie z zasobami z wykorzystaniem określonego protokołu dla URL: openconnection() zwraca URLConnection, istnieje możliwość rzutowania na konkretny protokół java.net.httpurlconnection

Klasa URL Klasa URL reprezentuje adres URL w sieci WWW. Obiekt URL można utworzyć na kilka sposobów: new URL (String spec) new URL (String prot, String host, String file) new URL (String prot, String host, int port, String file) new URL (URL context, String spec) Podczas tworzenia obiektu URL może zostać zgłoszony wyjątek MalformedURLException.

Klasa URL Klasa URL udostępnia wiele metod odczytywania parametrów adresu URL: getprotocol () gethost () getport () getpath () getquery () getref ()

Czytanie z obiektu URL Metoda InputStream openstream () klasy URL potrafi nawiązać połączenie z podanym zasobem w sieci i otworzyć dla niego strumień do czytania: URL url = new URL(URLName); BufferedReader in = new BufferedReader( new InputStreamReader( url.openstream())); String line; while ((line=in.readline())!=null) { // kolejne linie dokumentu są do dyspozycji } in.close();

Klasa URLConnection Klasa URLConnection ma zapewnić łatwiejszą w użyciu, wysokopoziomową abstrakcję połączenia sieciowego. Klasa URLConnection wykorzystuje klasę Socket do zapewnienia łączności sieciowej. Klasa URLConnection jest mocno związana z protokołem HTTP i zakłada, że każdy przesyłany plik jest poprzedzony nagłówkiem MIME.

Klasa URLConnection Otwieranie połączeń URLConnection: // konstrukcja URL URL url = new URL("http:// "); // pozyskanie URLConnection URLConnection uc = url.openconnection(); // konfiguracja URLConnection // odczytanie pól nagłówka // pobranie strumienia wejściowego // pobranie strumienia wyjściowego // zamknięcie połączenia

Klasa URLConnection Czytanie danych: URL url = new URL("http:// "); URLConnection uc = url.openconnection(); InputStream is = uc.getinputstream(); Pisanie danych: URL url = new URL("http:// "); URLConnection uc = url.openconnection(); uc.setdooutput(); InputStream is = uc.getinputstream(); OutputStream is = uc.getoutputstream();

Klasa URLConnection Serwery HTTP dostarczają sporo informacji w nagłówkach MIME. Klasa URLConnection posiada metody do odczytywania informacji z nagłówka MIME: getcontenttype() getdate() getcontentlength() getexpiration() getcontentencoding() getlastmodified() Klasa URLConnection posiada też kilka ogólnych metod do odczytywania informacji z nagłówka MIME: getheaderfieldkey(int) getheaderfield(int) getheaderfield(string)

Klasa URLConnection Klasa URLConnection może konfigurować połączenie za pomocą metod: setdoinput(boolean) setdooutput(boolean) setallowuserinteraction(boolean) setusecaches(boolean) setifmodifiedsince(long) Klasa URLConnection może pobrać treść (obiekt Object) metodą getcontent(). Dodatkowe metody przydatne do pracy z adresami URL typu http są w podklasie HttpURLConnection zawiera pewne.

Wyświetlanie zawartości strony na standardowe wyjście import java.net.*; import java.io.*; public class URLReader { public static void main(string[ ] args) throws Exception { URL koszalin = new URL("http://www.koszalin.pl/"); BufferedReader in = new BufferedReader( new InputStreamReader( koszalin.openstream())); String inputline; while ((inputline = in.readline())!= null) System.out.println(inputLine); in.close(); } }

Przykład: połączenie dla określonego protokołu import java.net.*; import java.io.*; public class URLConnectionReader { public static void main(string[] args) throws Exception { URL koszalin = new URL("http://www.koszalin.com/"); URLConnection koszalinconnect = koszalin.openconnection(); BufferedReader in = new BufferedReader( new InputStreamReader(koszalinConnect.getInputStream())); String inputline; while ((inputline = in.readline())!= null) System.out.println(inputLine); in.close(); } }

Pisanie pod wskazany URL Kroki wymagane do stworzenia klienta piszącego pod wskazany URL: 1.utworzenie URL 2.pobranie obiektu URLConnection 3.ustawienie właściwości pisania do strumienia 4.otwarcie połączenia do zasobów 5.pobranie strumienia wyjściowego z obiektu połączenie 6.zapis do strumienia wyjściowego 7.zamknięcie strumienia wyjściowego

Zapis do strumienia wyjściowego. import java.io.*; import java.net.*; public class Reverse { public static void main(string[ ] args) throws Exception {... URL url = new URL(args[0]); // (1) URLConnection connection = url.openconnection(); //(2) connection.setdooutput(true); //(3) OutputStreamWriter out = new OutputStreamWriter( connection.getoutputstream()); //(4) out.write("string=" + stringtoreverse); //(5) out.close();... } }

InetAddress Klasa reprezentuje 32 bitowy lub 128 bitowy adres IP na protokole transportowym UDP lub TCP Złożony jest z adresu IP oraz nazwy hosta Dwa typy adresów: multicast i unicast. Metody: static getlocalhost() zwraca obiekt klasy InetAddres opisujący lokalny komputer String gethostaddress() zwraca adres w postaci XXX.XXX.XXX.XXX String gethostname() zwraca adres w postaci maszyna.domena1.domena2 Metody pomocnicze, np. ismulticastaddress()

Model klient-serwer W modelu klient-serwer (ang. client-server) dane trzymane są na serwerze, interfejs użytkownika i logika przetwarzania danych są realizowane na kliencie. Zadaniem serwera jest przetwarzanie i analizowanie danych przed odesłaniem ich do klienta. Przykłady takich modeli: FTP, WWW. Przeciwieństwem tego modelu jest model równorzędny (ang. peer-to-peer) takie jak gry sieciowe, system telefoniczny, itp.

Porty Porty Porty Architektura Klient-Serwer Port, na którym klient nasłuchuje Przywiązanie klienta do konkretnego portu Serwer ServerSocket Serwer Porty Porty Klient Socket Klient nazwa hosta serwera numer portu serwera, na którym nasłuchuje Nasłuchiwanie Przepięcie klienta na nowy port, w celu zwolnienia portu do nasłuchiwania Przydzielenie portu Gniazdo (socket): jest punktem końcowym wykorzystywanym do zestawiania dwukierunkowego połączenia pomiędzy działającymi aplikacjami w sieci. Gniazdo jest przywiązane do wybranego portu, tak że warstwa TCP może identyfikować aplikację, do której powinny zostać dostarczone dane.

Architektura wielowarstwowa Zalety architektury rozproszonej: Skalowalność aplikacji Dostępność Rozszerzalność aplikacji Bezpieczeństwo Wady architektury rozproszonej: Dodatkowa złożoność aplikacji Potencjalnie wiele miejsc, w których mogą wystąpić błędy Ograniczenia związane z przepustowością łączy komunikacyjnych Warstwa pośrednicząca Cienki klient Warstwa pośrednicząca Logika usługowa Logika usługowa Logika usługowa Baza danych Usługi

Czytanie i zapis z gniazda Klient 1) Utwórz gniazdo. Wymagana nazwa maszyny oraz numer portu. 2) Pobierz strumień wejściowy i wyjściowy PrintWriter i BufferedReader. 3) Czytaj linie po linii z BufferedReader i pisz do PrintWriter 4) Zamknij strumienie. 5) Zamknij połączenie. Serwer 1) Utwórz gniazdo ServerSocekt na określonym porcie. 2) Zadeklaruj zamienną typu ClientSocket. 3) Użyj metody accept() w celu odebrania i ustanowienia przychodzącego połączenia. 4) Utwórz wątek do obsługi odebranego połączenia. 5) Pobierz strumień do pisania i czytania (PrintWriter i BufferedReader). 6) Pisz i czytaj ze strumieni. 7) Zamknij strumienie. 8) Zamknij połączenia.

Protokół Opisuje sposób komunikacji pomiędzy klientem i serwerem. Przeważnie realizowane jako automat. W przypadku protokołu tekstowego można wykorzystać tokenizer. Tokenizer: utworzyć tokenizer z początkowego ciągu znaków; odbierać kolejne części ciągu znaków (tokenów) za pomocą nexttoken(); liczba tokenów pozostałych do odebrania: counttokens().

Przykład Tokenzier public class TokenizerTest { public static void main(string[] args) { if (args.length == 1) { String input = args[0], delimiters = ; ; StringTokenizer token = new StringTokenizer(input, delimiters); while (token.hasmoretokens()) { System.out.println(token.nextToken()); } }else { System.out.println("Podaj ciag znakow ); } } }

Gniazda Transmitowanie danych w pakietach to skomplikowana czynność na szczęście berkeleyowskie gniazda pozwalają traktować połączenie sieciowe jak strumień. Gniazdo obsługuje połączenie między dwoma hostami: łączy się ze zdalną maszyną > wysyła dane > odbiera dane > zamyka połączenie, a także łączy się z portem, czeka na dane i odbiera połączenie o zdalnej maszyny na porcie granicznym. Klasa Socket jest wykorzystywana przez klienty i serwery, posiada metody pozwalające wykonywać pierwsze cztery z wymienionych operacji.

Klasa Socket Socket to podstawowa klasa do wykonywania operacji TCP po stronie klienta. W czasie konstrukcji obiektu klasy Socket od razu jest nawiązywane połączenie: Socket (String host, int port) throws UnknownHostException, IOException Socket (InetAddress host, int port) throws IOException Na końcu pracy z gniazdem należy zamknąć połączenie: socket.close() http://www.cs.put.poznan.pl/dwawrzyniak/dpe/jsock.pdf

Klasa Socket Obiekt klasy Socket posiada kilka metod udostępniających informacje o gnieździe: getinetaddress() getport() getlocalport() isclosed()

Komunikacja z hostem za pomocą obiektu Socket Komunikacja z hostem jest realizowana za pomocą zwykłych strumieni bajtowych, do których dostęp uzyskuje się za pomocą metod: getinputstream() getoutputstream() Strumienie te są opakowywane: Socket s = new Socket( ); BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

Komunikacja z hostem za pomocą obiektu Socket Metoda close() gniazda zamyka automatycznie jego strumienie do komunikacji. Gdy jeden ze strumieni do komunikacji zostanie zamknięty, całe gniazdo jest zamykane. Gdy w czasie pracy z gniazdem chcemy zamknąć tylko strumień do czytania lub pisania należy użyć jednej z metod: shutdowninput() shutdownoutput()

Opcje gniazda Socket Opcje gniazda określają, w jaki sposób gniazda wysyłają i odbierają dane: TCP_NODELAY wartość true wyłącza schemat buforowania; SO_LINGER określa, co należy zrobić z datagramami, które nie zostały wysłane przed zamknięciem gniazda; SO_TIMEOUT wartość wyrażona w milisekundach powoduje, że gniazdo nie zablokuje się na dłużej w trakcie czytania (zgłaszany jest wyjątek InterruptedException ale gniazdo nie jest zamykane); SO_KEEPALIVE wartość true włącza system kontrolowania bezczynnych połączeń (raz na dwie godziny).

Serwer Pisząc serwer zawsze trzeba opracować protokół rozmowy z klientami. Cykl życiowy serwera: serwer zajmuje port; w pętli: serwer czeka na klienta, prowadzi z nim rozmowę a na końcu zamyka połączenie z klientem; serwer zwalnia port po zakończonej pracy.

Klasa ServerSocket Gniazdo serwera zajmuje lokalny port i czeka na nadchodzące połączenia TCP. W czasie konstrukcji obiektu klasy ServerSocket od razu jest zajmowany lokalny port: ServerSocket (int port) throws IOException ServerSocket (int port, int queue) throws IOException

Klasa ServerSocket Przyjmowanie i zamykanie połączeń: ServerSocket server = new ServerSocket(4848); Socket s = server.accept(); // rozmowa z klientem s.close(); Dostęp do strumieni za pomocą gniazda roboczego: OutputStream os = s.getoutputstream(); InputStream is = s.getinputstream();

Klasa ServerSocket Obiekt klasy ServerSocket posiada kilka metod udostępniających informacje o gnieździe: getinetaddress() getlocalport() Opcje gniazd serwera: SO_TIMEOUT wartość wyrażona w milisekundach określa czas akceptacji nowego połączenia (wartość 0 oznacza brak limitu).