Programowanie sieciowe w Javie

Slides:



Advertisements
Podobne prezentacje
Serwery WWW Michał Kuciapski Uniwersytet Gdański Wyższa Szkoła Bankowa
Advertisements

Wstęp do strumieni danych
Rodzaju działalności - organizacyjne
Protokoły sieciowe.
Użytkowanie Sieci Marcin KORZEB WSTI - Użytkowanie Sieci.
Adresowanie MAC Adresowanie IP Protokół ARP
Programowanie obiektowe
Sieci komputerowe Usługi sieciowe Piotr Górczyński 27/09/2002.
Przypisywanie adresów TCP/IP
Rozszerzalność systemów rozproszonych
SIECI KOMPUTEROWE Adresowanie IP Adresy IPv4.
Autor Roman Jędras Prowadzący: dr inż. Antoni Izworski Przedmiot:
Nguyen Hung Son Uniwersytet Warszawski
Podstawy Programowania sieciowego w Javie
Architektura Systemów Komputerowych
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
Poj ę cia Sieciowe. IMAP-to internetowy protokół pocztowy zaprojektowany IMAP-to internetowy protokół pocztowy zaprojektowany POP3-to protokół internetowy.
Programowanie sieciowe w Javie
Zaawansowane technologie Javy Wykład 5 (6 marca 2012) Programowanie sieciowe (1)
Gniazda komunikacji sieciowej w języku Java
Monitoring Sieci Narzędzia Sieciowe.
Sieci komputerowe: Firewall
.NET Remoting Łukasz Zawadzki.
Paweł Fałat Katedra Informatyki Stosowanej
Język Java Wielowątkowość.
USŁUGI INTERNETOWE TCP/IP WWW FTP USENET.
Protokoły sieciowe.
LEKCJA 3 ADRESOWANIE SIECI I HOSTÓW vol 1
Protokoły komunikacyjne
KONFIGURACJA KOMPUTERA
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Cecylia Szymanska - Ban | Education Lead Microsoft.
POJĘCIA ZWIĄZANE Z SIECIĄ.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Adresy komputerów w sieci
Tworzenie aplikacji mobilnych
Podsieci ZS3 Jasło Klasa 4e.
Opracował: mgr Artem Nowicki
Sieci komputerowe.
Podstawy działania wybranych usług sieciowych
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Rozdział 7: Adresowanie IP
ADRES IP – unikatowy numer przyporządkowany urządzeniom sieci komputerowych. Adres IPv4 składa się z 32 bitów podzielonych na 4 oktety po 8 bitów każdy.
Prezentacja Adrian Pyza 4i.
SYSTEMY OPERACYJNE Adresowanie IP cz3.
INTERNET Sieć komputerowa o światowym zasięgu łącząca sieci lokalne, sieci rozległe i wszystkie komputery do nich podłączone. Służy do komunikacji między.
Adresowanie w sieci komputerowej
Laboratorium systemów operacyjnych
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Aplikacje TCP i UDP. Łukasz Zieliński
Systemy operacyjne i sieci komputerowe
Systemy operacyjne i sieci komputerowe
1 Programowanie sieciowe Protokoły sieciowe, model warstwowy DOD, protokoły TCP i UDP, adresy IP, porty, gniazda, operacje na adresach - klasa InetAddress.
Poczta elektroniczna "electronic mail") A.Ś.
Systemy operacyjne i sieci komputerowe
Programowanie sieciowe w Javie Michał Kuciapski
Programowanie sieciowe w Javie Michał Kuciapski
INTERNET jako „ocean informacji”
Wykład 7 i 8 Na podstawie CCNA Exploration Moduł 5 i 6 – streszczenie
Zaawansowane technologie Javy Wykład 4 (16 marca 2017)
Klasowanie adresów IP.
Protokoły używane w sieciach LAN Funkcje sieciowego systemu komputerowego Wykład 5.
Programowanie Obiektowe – Wykład 2
Wydział Matematyki, Informatyki i Architektury Krajobrazu
Sieci komputerowe Usługi sieciowe 27/09/2002.
Programowanie obiektowe – zastosowanie języka Java SE
Poczta elektroniczna "electronic mail") A.Ś.
Zapis prezentacji:

Programowanie sieciowe w Javie Michał Kuciapski m.kuciapski@univ.gda.pl

Możliwości sieciowe Javy

Korzyści z zastosowania Javy w programowaniu sieciowym Język zaprojektowany z myślą o sieci – niezależność od platformy, międzynarodowy zestaw znaków, bezpieczeństwo Bogaty zestaw klas i metod sieciowych Znaczne uproszczenie obsługi działania sieci

Obszary zastosowań Pobieranie i wyświetlanie danych – alternatywa dla PHP, CGI, ASP, itd. Powtarzalne pobieranie i przesyłanie danych przechowywanie plików obliczenia równoległe Formularze Komunikacja synchroniczna i asynchroniczna Serwery sieciowe

Obszary zastosowań – c.d. Przeszukiwanie zasobów sieci Tworzenie interaktywnych stron: JSP Handel i bankowość elektroniczna – Java Cryptography Extension Multimedia – audio/video

Podstawowe zagadnienia związane z sieciami

Warstwy sieci Aplikacji Aplikacji Transportowa Transportowa Sieciowa Fizyczna

Adresowanie – adresy IP każdy host w sieci ma przypisany adres IP który jest unikalny przynajmniej w ramach sieci lokalnej adres IP składa się z 4 oktetów, z których każdy jest cyfrą z zakresu od 0 do 255 adresy z puli adresów prywatnych: Klasa A – 10.x.x.x Klasa B – 172.16.x.x – 172.31.x.x Klasa C – 192.168.x.x pula adresów dla testowania – 127.0.x.x

Adresowanie – nazwy przyjazne przypisywane adresom IP przy wykorzystaniu systemu DNS FQDN – system jednoznacznego identyfikowania hostów w oparciu o hierarchiczną strukturę DNS – np. bsvc.univ.gda.pl

Porty umożliwiają wykonywanie wielu zadań „równocześnie” są elementem abstrakcyjnym – uchwytem do strumienia wejściowego i (lub) wyjściowego mogą być przydzielone konkretnej usłudze każdy port jest identyfikowalny liczbą z zakresu od 1 do 65 535 Zarezerwowane dla znanych usług – 1-1023

Porty – przykłady podstawowych Nazwa Numer portu Typ echo 7 TCP/UDP daytime 13 ftp-data 20 TCP FTP 21 Telnet 23 SMTP 25 finger 79 HTTP 80 POP3 120 NNTP 119 RMI Registry 1099

Pakiety sieciowe

Pakiety sieciowe Nazwa Opis java.net Podstawowy pakiet z klasami sieciowymi java.applet Metody sieciowe appletów – np. getImage, getAudiClip javax.net Klasy związane z tworzeniem bezpiecznych gniazd SSL com.sun.net.ssl Klasa suna dla szyfrowania java.rmi Klasy zdalnego wywoływania metod javax.rmi Klasy umożliwiające zdalnego wywoływania metod zgodnie z CORBA i przy wykorzystaniu SSL javax.mail Klasy umożliwiające obsługę poczty elektronicznej

Wyszukiwanie adresów

Klasa klasa InetAddress opisuje adres komputera w sieci poprzez nazwę/domenę, np. bsvc.univ.gda.pl oraz poprzez numer IP, np. 153.19.122.213 obiekty klasy InetAddress są tworzone poprzez metody statyczne, nie są dostępne żadne konstruktory wszystkie metody muszą zawierać deklaracje lub obsługę wyjątku UnknownHostException

Tworzenie obiektu InetAddress.getByName(String Nazwa) InetAddress.getAllByName(String Nazwa) InetAddress.getLocalHost(String Nazwa)

Przykład import java.net.*; public class Adresy { public static void main(String args[]){ try{ InetAddress lokalny = InetAddress.getLocalHost(); System.out.println("Adres komputera lokalnego: " + lokalny); InetAddress zdalny = InetAddress.getByName("netbeens.org"); System.out.println("Adres komputera www.netbeens.org "+ zdalny);

Przykład c.d. InetAddress wszystkieZdalny[] = InetAddress.getAllByName("www.netbeens.org"); System.out.println("Adresy komputera www.netbeens.org to:"); for(int i=0; i<wszystkieZdalny.length; i++) { System.out.println(wszystkieZdalny[i]); } } catch (UnknownHostException he) { he.printStackTrace();

Metody Public String getHostName() – zwraca nazwę hosta Public byte[] getAddress() – zwraca adres hosta jato tablicę byte Public String getHostAddress() – zwraca nazwę hosta jako tekst Nie ma dostępnych metod typu setHostName() czy setHostAddress()

Metody – przykład import java.net.*; public class daneHosta { public static void main(String[] args) { String nHosta = "localhost"; try InetAddress host = InetAddress.getByName(nHosta); byte[] adresIP = host.getAddress(); String adres = ""; }

Metody – przykład c.d. for (int i=0; i<adresIP.length; i++) { int przekNaByte = adresIP[i] < 0 ? adresIP[i] + 256 : adresIP[i]; adres += przekNaByte; if (i != adresIP.length -1) adres += "."; }

Metody – przykład c.d. System.out.println("Nazwa hosta: " + host.getHostName() + "\nadres IP poprzez tablicę: " + adres + "\nadres IP poprzez tekst: " + host.getHostAddress()); } catch(UnknownHostException e) { System.out.println("Host " + nHosta + "nie istnieje");

Gniazda

Gniazda Gniazda klientow

Koncepcja Gniazda są abstrakcyjnym bytem umożliwiającym pominięcie pisania kodu dla obsługi szczegółów sieci związanych z transmisją danych: rodzajem nośników, rozmiarami, tworzeniem, łączeniem i retransmisją pakietów, sprawdzaniem sekwencji, adresowaniem sieciowym, rutingiem. Gniazda pozwalają traktować połączenie jako zwykły strumień umożliwiający zapisywanie i pobieranie bajtów (danych).

Możliwe do wykonania operacje połączyć się ze zdalną maszyną wysłanie danych odebranie danych zamknięcie połączenia połączyć się ze zdalnym portem odebrać połączenie od zdalnej maszyny czekać na nadchodzące dane

Typowy scenariusz połączenia Utworzenie gniazda Próba połączenie ze zdalnym hostem Pobieranie/wysyłanie danych lub zwrócenie błędu Zamknięcie połączenia

Tworzenie gniazda - konstruktory Dostępnych jest wiele konstruktorów, z czego 4 są aprobowane, 2 dla wirtualnych maszyn Javy Utworzenie gniazda wymaga dodania obsługi wyjątków: UnknownHostException IOException – związany z problemem połączenia, np.: Błędy odbioru połączenia Brak udostępnionego portu Błędy przekierowań

Tworzenie gniazda - konstruktory new Socket(String host, int port ) new Socket(InetAddress host, int port ) new Socket(String host , int port , InetAddress interfejs , int portLokalny) new Socket(InetAddress host , int port , InetAddress interfejs , int portLokalny)

Tworzenie gniazda - przykład import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.io.IOException; public class TworzenieGniazda { public static void main(String args[]) { try InetAddress lokalny = InetAddress.getByName("83.11.56.140"); InetAddress zdalny = InetAddress.getByName("bsvc.univ.gda.pl");

Tworzenie gniazda – przykład – c.d. Socket gniazdo = new Socket(zdalny,80,lokalny,1350); System.out.println("Na porcie działa serwer"); } catch(UnknownHostException e) { System.err.println(e); catch(IOException e)

Pobieranie informacji z gniazda InetAddress getInetAddress() int getPort() int getLocalPort() InetAddress getLocalAddress()

Pobieranie informacji z gniazda – przykład 1 String nLokalny = "83.11.56.140"; String nZdalny = "bsvc.univ.gda.pl"; System.out.println("Połączenie z serwerem: " + gniazdo.getInetAddress().getHostName() + " o adresie: " + gniazdo.getInetAddress().getHostAddress() + " na porcie " + gniazdo.getPort() + "\nZ hosta: " + gniazdo.getLocalAddress().getCanonicalHostName() + " o adresie: " + gniazdo.getLocalAddress().getHostAddress() + " na porcie: " + gniazdo.getLocalPort()); Dodatkowy kod dla wcześniejszego przykładu

Pobieranie informacji z gniazda – przykład 2 import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.io.IOException; public class GniazdoInformacje2 { public static void main(String args[]) { String nZdalny = "bsvc.univ.gda.pl"; try { Socket gniazdo = new Socket("www.oracle.com",80); System.out.println(gniazdo.toString()); } catch(UnknownHostException e) { System.err.println(e); } catch(IOException e) { System.err.println(e); } }}

Pobieranie i wysyłanie danych z gniazda pobieranie danych InputStream getInputStream() throws IOException wysyłanie danych OutputStream getOutputStream() throws IOException zazwyczaj powyższe strumienie łączy się łańcuchowo z innymi dla wygodniejszego pobierania i przesyłania danych

Pobieranie i wysyłanie danych z gniazda Przykłady klas obudowujących: strumień wejściowy: InputStreamReader(InputStream in) BufferedReader(Reader in) – dla buforowania InputStreamReader Strumień wyjściowy: PrintWriter(OutputStream out) OutputStreamWriter(OutputStream out)

Metody związane z pobieraniem danych Dla klasy InputStream - int read() Dla klasy InputStreamReader – int read() Dla klasy BufferedReader – String readLine()

Metody związane z wysyłaniem danych Dla klasy OutputStream - void write(int dane) throws IOException Dla klasy PrintWriter – void print(String dane) Dla klasy OutputStreamWriter – void write(String dane) throws IOException void flush() throws IOException – wyczyszcza strumień !!!

Zamykanie strumieni i gniazd po zakończeniu połączenia należy zamknąć strumienie wejściowe i wyjściowe w związku z potencjalnym wystąpieniem błędu komunikacji z serwerem należy dodać zamykanie strumieni w obsłudze wyjątków w bloku finally gniazda jak i strumienie zamyka się poprzez metodę void close() Możliwe jest zamknięcie jednostronne gniazda: void shutDownInput() throws IOException

Pobieranie danych - przykład import java.io.*; import java.net.*; public class pobDanych { public static void main(String args[]) { try { Socket gn = new Socket("localhost", 1310); InputStreamReader strumWe = new InputStreamReader(gn.getInputStream()); BufferedReader br = new BufferedReader(strumWe); System.out.println(br.readLine()); }

Pobieranie danych – przykład c.d catch(UnknownHostException e) { System.out.println(e); } catch(IOException e)

Wysyłanie danych - przykład import java.io.*; import java.net.*; public class wysDanych { public static void main(String args[]) { OutputStreamWriter str; try { for (int i=0; i<10;i++) { Socket gn = new Socket("localhost", 1300); str = new OutputStreamWriter(gn.getOutputStream()); str.write("Połącznie sieciowe działa \r\n"); str.flush(); }

Wysyłanie danych – przykład c.d catch(UnknownHostException e) { System.out.println(e); } catch(IOException e)

Opcje gniazd - podstawowe void setTcpNoDelay(boolean on) throws IOException – umożliwia natychmiastowe wysyłanie pakietów boolean getTcpNoDelay() throws IOException void setSoTimeout(int milisekundy) throws SocketException – umożliwia ustalenie czasu czekania na połączenie int getSoTimeout () throws SocketException void setKeepAlive(boolean on) throws SocketException – powoduje okresowe przesyłanie pakietów boolean getKeepAlive() throws SocketException Java 1.3

Pobieranie i wysyłanie danych - przykład import java.net.*; import java.io.*; public class WhoisKlient { public static void main(String args[]) { int portDomyslny = 43; String hostDomyslny = "whois.internic.net"; InetAddress adres; try adres = InetAddress.getByName(hostDomyslny); Socket gniazdo = new Socket(adres, portDomyslny);

Pobieranie i wysyłanie danych – przykład c.d. Writer wys = new OutputStreamWriter(gniazdo.getOutputStream(),"8859_1"); InputStream wcz = gniazdo.getInputStream(); for (int i=0;i<args.length;i++) wys.write(args[i] + " "); wys.write("\r\n"); wys.flush(); int wczZn; while((wczZn=wcz.read())!=-1) System.out.print((char)wczZn); }

Pobieranie i wysyłanie danych – przykład c.d. catch (UnknownHostException e) { System.err.println(e); } catch (IOException e)