Programowanie sieciowe w Javie - PowerPoint PPT Presentation

1 / 47
About This Presentation
Title:

Programowanie sieciowe w Javie

Description:

Title: Microsoft Office Outlook 2003 Training Author: Micha Kuciapski Last modified by: Micha Kuciapski Created Date: 11/15/2005 9:30:33 PM – PowerPoint PPT presentation

Number of Views:177
Avg rating:3.0/5.0
Slides: 48
Provided by: MichalKu
Category:

less

Transcript and Presenter's Notes

Title: Programowanie sieciowe w Javie


1
Programowanie sieciowe w Javie
  • Michal Kuciapski
  • m.kuciapski_at_univ.gda.pl

2
Mozliwosci sieciowe Javy
3
Korzysci z zastosowania Javy w programowaniu
sieciowym
  • Jezyk zaprojektowany z mysla o sieci
    niezaleznosc od platformy, miedzynarodowy zestaw
    znaków, bezpieczenstwo
  • Bogaty zestaw klas i metod sieciowych
  • Znaczne uproszczenie obslugi dzialania sieci

4
Obszary zastosowan
  • Pobieranie i wyswietlanie danych alternatywa
    dla PHP, CGI, ASP, itd.
  • Powtarzalne pobieranie i przesylanie danych
  • przechowywanie plików
  • obliczenia równolegle
  • Formularze
  • Komunikacja synchroniczna i asynchroniczna
  • Serwery sieciowe

5
Obszary zastosowan c.d.
  • Przeszukiwanie zasobów sieci
  • Tworzenie interaktywnych stron JSP
  • Handel i bankowosc elektroniczna Java
    Cryptography Extension
  • Multimedia audio/video

6
Podstawowe zagadnienia zwiazane z sieciami
7
Warstwy sieci
Aplikacji
Aplikacji
Transportowa
Transportowa
Sieciowa
Sieciowa
Fizyczna
8
Adresowanie adresy IP
  • kazdy host w sieci ma przypisany adres IP który
    jest unikalny przynajmniej w ramach sieci
    lokalnej
  • adres IP sklada sie z 4 oktetów, z których kazdy
    jest cyfra 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

9
Adresowanie nazwy przyjazne
  • przypisywane adresom IP przy wykorzystaniu
    systemu DNS
  • FQDN system jednoznacznego identyfikowania
    hostów w oparciu o hierarchiczna strukture DNS
    np. bsvc.univ.gda.pl

10
Porty
  • umozliwiaja wykonywanie wielu zadan
    równoczesnie
  • sa elementem abstrakcyjnym uchwytem do
    strumienia wejsciowego i (lub) wyjsciowego
  • moga byc przydzielone konkretnej usludze
  • kazdy port jest identyfikowalny liczba z zakresu
    od 1 do 65 535
  • Zarezerwowane dla znanych uslug 1-1023

11
Porty przyklady podstawowych
Nazwa Numer portu Typ
echo 7 TCP/UDP
daytime 13 TCP/UDP
ftp-data 20 TCP
FTP 21 TCP
Telnet 23 TCP
SMTP 25 TCP
finger 79 TCP
HTTP 80 TCP
POP3 120 TCP
NNTP 119 TCP
RMI Registry 1099 TCP
12
Pakiety sieciowe
13
Pakiety sieciowe
Nazwa Opis
java.net Podstawowy pakiet z klasami sieciowymi
java.applet Metody sieciowe appletów np. getImage, getAudiClip
javax.net Klasy zwiazane z tworzeniem bezpiecznych gniazd SSL
com.sun.net.ssl Klasa suna dla szyfrowania
java.rmi Klasy zdalnego wywolywania metod
javax.rmi Klasy umozliwiajace zdalnego wywolywania metod zgodnie z CORBA i przy wykorzystaniu SSL
javax.mail Klasy umozliwiajace obsluge poczty elektronicznej
14
Wyszukiwanie adresów
15
Klasa
  • klasa InetAddress opisuje adres komputera w sieci
    poprzez nazwe/domene, np. bsvc.univ.gda.pl oraz
    poprzez numer IP, np. 153.19.122.213
  • obiekty klasy InetAddress sa tworzone poprzez
    metody statyczne, nie sa dostepne zadne
    konstruktory
  • wszystkie metody musza zawierac deklaracje lub
    obsluge wyjatku UnknownHostException

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

17
Przyklad
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)
18
Przyklad c.d.
  • InetAddress wszystkieZdalny
    InetAddress.getAllByName("www.netbeens.org")
  • System.out.println("Adresy komputera
    www.netbeens.org to")
  • for(int i0 iltwszystkieZdalny.length i)
  • System.out.println(wszystkieZdalnyi)
  • catch (UnknownHostException he)
  • he.printStackTrace()

19
Metody
  • Public String getHostName() zwraca nazwe hosta
  • Public byte getAddress() zwraca adres hosta
    jato tablice byte
  • Public String getHostAddress() zwraca nazwe
    hosta jako tekst
  • Nie ma dostepnych metod typu setHostName() czy
    setHostAddress()

20
Metody przyklad
  • import java.net.
  • public class daneHosta
  • public static void main(String args)
  • String nHosta "localhost"
  • try
  • InetAddress host InetAddress.getByNam
    e(nHosta)
  • byte adresIP host.getAddress()
  • String adres ""

21
Metody przyklad c.d.
  • for (int i0 iltadresIP.length i)
  • int przekNaByte adresIPi lt 0 ?
    adresIPi 256 adresIPi
  • adres przekNaByte
  • if (i ! adresIP.length -1)
  • adres "."

22
Metody przyklad c.d.
  • System.out.println("Nazwa hosta "
    host.getHostName()
  • "\nadres IP poprzez tablice "
    adres
  • "\nadres IP poprzez tekst "
    host.getHostAddress())
  • catch(UnknownHostException e)
  • System.out.println("Host " nHosta
    "nie istnieje")

23
Gniazda
24
Gniazda
  • Gniazda klientow

25
Koncepcja
  • Gniazda sa abstrakcyjnym bytem umozliwiajacym
    pominiecie pisania kodu dla obslugi szczególów
    sieci zwiazanych z transmisja danych rodzajem
    nosników, rozmiarami, tworzeniem, laczeniem i
    retransmisja pakietów, sprawdzaniem sekwencji,
    adresowaniem sieciowym, rutingiem.
  • Gniazda pozwalaja traktowac polaczenie jako
    zwykly strumien umozliwiajacy zapisywanie i
    pobieranie bajtów (danych).

26
Mozliwe do wykonania operacje
  • polaczyc sie ze zdalna maszyna
  • wyslanie danych
  • odebranie danych
  • zamkniecie polaczenia
  • polaczyc sie ze zdalnym portem
  • odebrac polaczenie od zdalnej maszyny
  • czekac na nadchodzace dane

27
Typowy scenariusz polaczenia
  • Utworzenie gniazda
  • Próba polaczenie ze zdalnym hostem
  • Pobieranie/wysylanie danych lub zwrócenie bledu
  • Zamkniecie polaczenia

28
Tworzenie gniazda - konstruktory
  • Dostepnych jest wiele konstruktorów, z czego 4 sa
    aprobowane, 2 dla wirtualnych maszyn Javy
  • Utworzenie gniazda wymaga dodania obslugi
    wyjatków
  • UnknownHostException
  • IOException zwiazany z problemem polaczenia,
    np.
  • Bledy odbioru polaczenia
  • Brak udostepnionego portu
  • Bledy przekierowan

29
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
Tworzenie gniazda - przyklad
  • 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.getByNa
    me("83.11.56.140")
  • InetAddress zdalny InetAddress.getByNam
    e("bsvc.univ.gda.pl")

31
Tworzenie gniazda przyklad c.d.
  • Socket gniazdo new Socket(zdalny,80,lokaln
    y,1350)
  • System.out.println("Na porcie dziala
    serwer")
  • catch(UnknownHostException e)
  • System.err.println(e)
  • catch(IOException e)
  • System.err.println(e)

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

33
Pobieranie informacji z gniazda przyklad 1
String nLokalny "83.11.56.140" String nZdalny
"bsvc.univ.gda.pl" System.out.println("Polacze
nie z serwerem " gniazdo.getInetAddress().g
etHostName() " 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 wczesniejszego przykladu
34
Pobieranie informacji z gniazda przyklad 2
import java.net.InetAddress import
java.net.Socket import java.net.UnknownHostExcept
ion 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
Pobieranie i wysylanie danych z gniazda
  • pobieranie danych
  • InputStream getInputStream() throws
    IOException
  • wysylanie danych
  • OutputStream getOutputStream() throws
    IOException
  • zazwyczaj powyzsze strumienie laczy sie
    lancuchowo z innymi dla wygodniejszego pobierania
    i przesylania danych

36
Pobieranie i wysylanie danych z gniazda
  • Przyklady klas obudowujacych
  • strumien wejsciowy
  • InputStreamReader(InputStream in)
  • BufferedReader(Reader in) dla buforowania
  • InputStreamReader
  • Strumien wyjsciowy
  • PrintWriter(OutputStream out)
  • OutputStreamWriter(OutputStream out)

37
Metody zwiazane z pobieraniem danych
  • Dla klasy InputStream - int read()
  • Dla klasy InputStreamReader int read()
  • Dla klasy BufferedReader String readLine()

38
Metody zwiazane z wysylaniem 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
    strumien !!!

39
Zamykanie strumieni i gniazd
  • po zakonczeniu polaczenia nalezy zamknac
    strumienie wejsciowe i wyjsciowe
  • w zwiazku z potencjalnym wystapieniem bledu
    komunikacji z serwerem nalezy dodac zamykanie
    strumieni w obsludze wyjatków w bloku finally
  • gniazda jak i strumienie zamyka sie poprzez
    metode
  • void close()
  • Mozliwe jest zamkniecie jednostronne gniazda
  • void shutDownInput() throws IOException
  • void shutDownInput() throws IOException

40
Pobieranie danych - przyklad
  • 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
Pobieranie danych przyklad c.d
  • catch(UnknownHostException e)
  • System.out.println(e)
  • catch(IOException e)
  • System.out.println(e)

42
Wysylanie danych - przyklad
  • import java.io.
  • import java.net.
  • public class wysDanych
  • public static void main(String args)
  • OutputStreamWriter str
  • try
  • for (int i0 ilt10i)
  • Socket gn new
    Socket("localhost", 1300)
    str new OutputStreamWriter(gn.getOutputStre
    am())
  • str.write("Polacznie sieciowe
    dziala \r\n")
  • str.flush()

43
Wysylanie danych przyklad c.d
  • catch(UnknownHostException e)
  • System.out.println(e)
  • catch(IOException e)
  • System.out.println(e)

44
Opcje gniazd - podstawowe
  • void setTcpNoDelay(boolean on) throws IOException
    umozliwia natychmiastowe wysylanie pakietów
  • boolean getTcpNoDelay() throws IOException
  • void setSoTimeout(int milisekundy) throws
    SocketException umozliwia ustalenie czasu
    czekania na polaczenie
  • int getSoTimeout () throws SocketException
  • void setKeepAlive(boolean on) throws
    SocketException powoduje okresowe przesylanie
    pakietów
  • boolean getKeepAlive() throws SocketException

Java 1.3
45
Pobieranie i wysylanie danych - przyklad
  • 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(hostDomy
    slny)
  • Socket gniazdo new Socket(adres,
    portDomyslny)

46
Pobieranie i wysylanie danych przyklad c.d.
  • Writer wys new OutputStreamWriter(gniazdo.getOu
    tputStream(),"8859_1")
  • InputStream wcz gniazdo.getInputStre
    am()
  • for (int i0iltargs.lengthi)
  • wys.write(argsi " ")
  • wys.write("\r\n")
  • wys.flush()
  • int wczZn
  • while((wczZnwcz.read())!-1)
  • System.out.print((char)wczZn)

47
Pobieranie i wysylanie danych przyklad c.d.
  • catch (UnknownHostException e)
  • System.err.println(e)
  • catch (IOException e)
  • System.err.println(e)
Write a Comment
User Comments (0)
About PowerShow.com