Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie sieciowe w Javie Michał Kuciapski

Podobne prezentacje


Prezentacja na temat: "Programowanie sieciowe w Javie Michał Kuciapski"— Zapis prezentacji:

1 Programowanie sieciowe w Javie Michał Kuciapski

2 Możliwości sieciowe Javy

3 3 z 137 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

4 4 z 137 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

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

6 Podstawowe zagadnienia związane z sieciami

7 7 z 137 Warstwy sieci Aplikacji Transportowa Sieciowa Fizyczna Aplikacji Transportowa Sieciowa

8 8 z 137 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 – x.x – x.x –Klasa C – x.x pula adresów dla testowania – x.x

9 9 z 137 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

10 10 z 137 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 Zarezerwowane dla znanych usług –

11 11 z 137 Porty – przykłady podstawowych NazwaNumer portuTyp echo7TCP/UDP daytime13TCP/UDP ftp-data20TCP FTP21TCP Telnet23TCP SMTP25TCP finger79TCP HTTP80TCP POP3120TCP NNTP119TCP RMI Registry1099TCP

12 Pakiety sieciowe

13 13 z 137 Pakiety sieciowe NazwaOpis java.netPodstawowy pakiet z klasami sieciowymi java.appletMetody sieciowe appletów – np. getImage, getAudiClip javax.netKlasy związane z tworzeniem bezpiecznych gniazd SSL com.sun.net.sslKlasa suna dla szyfrowania java.rmiKlasy zdalnego wywoływania metod javax.rmiKlasy umożliwiające zdalnego wywoływania metod zgodnie z CORBA i przy wykorzystaniu SSL javax.mailKlasy umożliwiające obsługę poczty elektronicznej

14 Wyszukiwanie adresów

15 15 z 137 Klasa klasa InetAddress opisuje adres komputera w sieci poprzez nazwę/domenę, np. bsvc.univ.gda.pl oraz poprzez numer IP, np 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

16 16 z 137 Tworzenie obiektu InetAddress.getByName(String Nazwa) InetAddress.getAllByName(String Nazwa) InetAddress.getLocalHost(String Nazwa)

17 17 z 137 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 "+ zdalny);

18 18 z 137 Przykład c.d. InetAddress wszystkieZdalny[] = InetAddress.getAllByName("www.netbeens.org"); System.out.println("Adresy komputera to:"); for(int i=0; i

19 19 z 137 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()

20 20 z 137 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 = ""; }

21 21 z 137 Metody – przykład c.d. for (int i=0; i

22 22 z 137 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"); }

23 Gniazda

24 Gniazda klientow

25 25 z 137 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).

26 26 z 137 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

27 27 z 137 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

28 28 z 137 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ń

29 29 z 137 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)

30 30 z 137 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(" "); InetAddress zdalny = InetAddress.getByName("bsvc.univ.gda.pl");

31 31 z 137 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) { System.err.println(e); }

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

33 33 z 137 Pobieranie informacji z gniazda – przykład 1 Dodatkowy kod dla wcześniejszego przykładu String nLokalny = " "; 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());

34 34 z 137 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); } }}

35 35 z 137 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

36 36 z 137 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)

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

38 38 z 137 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ń !!!

39 39 z 137 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

40 40 z 137 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()); }

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

42 42 z 137 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(); }

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

44 44 z 137 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

45 45 z 137 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);

46 46 z 137 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

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


Pobierz ppt "Programowanie sieciowe w Javie Michał Kuciapski"

Podobne prezentacje


Reklamy Google