Programování v jazyku Java Java a Internet, základní pojmy, socketové x datagramové spojení, klient - server architektura.

Podobné dokumenty
Úvod Virtuální kanál TCP Datagramová služba UDP URL TCP, UDP, URL. Fakulta elektrotechnická

Se vznikem internetu se můžeme na síťovou komunikaci v Javě (komunikace mezi více JVM) dívat dvěma pohledy-způsoby:

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Jak naprogramovat internetovou komunikaci?

Komunikace v sítích TCP/IP (2)

Identifikátor materiálu: ICT-3-03

Rozhraní Sockets Java a C (BSD)

1 Úvod do sítí TCP a UDP Porty... 1

Rozhraní Sockets Java a C (BSD)

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

RMI Remote Method Invocation

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Práce se soubory v Javě

JAVA. Ještě k funkcionálnímu programování (pokračování z předchozí přednášky)

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

Internet protokol, IP adresy, návaznost IP na nižší vrstvy

metodický list č. 1 Internet protokol, návaznost na nižší vrstvy, směrování

InputStream. FilterInputStream

1. Téma 12 - Textové soubory a výjimky

7. Aplikační vrstva. Aplikační vrstva. Počítačové sítě I. 1 (5) KST/IPS1. Studijní cíl. Představíme si funkci aplikační vrstvy a jednotlivé protokoly.

Úvod do programovacích jazyků (Java)

Část 1 Příklad GUI aplikace Simulátor/Plátno. GUI s plátnem Struktura aplikace Struktura simulátoru Struktura grafického rozhraní Praktické ukázky

8. přednáška: Soubory a proudy

Inovace a zkvalitnění výuky prostřednictvím ICT Počítačové sítě Vrstvový model TCP/IP Ing. Zelinka Pavel

Přednáška 3. Opakovače,směrovače, mosty a síťové brány

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

TFTP Trivial File Transfer Protocol

Počítačové sítě II. 14. Transportní vrstva: TCP a UDP. Miroslav Spousta, 2005

Textové soubory. alg9 1

Identifikátor materiálu: ICT-3-10

JAVA. Ještě k funkcionálnímu programování (pokračování z předchozí přednášky)

Počítačové sítě Transportní vrstva. Transportní vrstva

Protokoly a Internet. Miloš Hrdý. 19. listopadu 2007

RMI - Distribuované objekty v Javě

Síťová vrstva. RNDr. Ing. Vladimir Smotlacha, Ph.D.

Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták

Remote Method Invocation RMI

Úvod do informatiky 5)

Úvod do programovacích jazyků (Java)

Úvod do informačních služeb Internetu

Zásobník protokolů TCP/IP

Fakulta elektrotechniky a informatiky Vysoká škola báňská - Technická univerzita Ostrava. Cvičení 5 POČÍTAČOVÁ OBRANA A ÚTOK - POU

Počítačové sítě Systém pro přenos souborů protokol FTP

Komunikační protokoly počítačů a počítačových sítí

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky UPS. FTP Klient. A05463 fboranek@atlas.

JAK ČÍST TUTO PREZENTACI

Distribuované systémy a výpočty

Počítačová síť. je skupina počítačů (uzlů), popřípadě periferií, které jsou vzájemně propojeny tak, aby mohly mezi sebou komunikovat.

Komunikační sokety. teorie a implementace v C#, C++ a Javě. Aleš Keprt Katedra informatiky UP duben 2006, revize květen 2007

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Inovace výuky prostřednictvím šablon pro SŠ

Soubor jako posloupnost bytů

Název školy: Základní škola a Mateřská škola Žalany. Číslo projektu: CZ. 1.07/1.4.00/ Téma sady: Informatika pro devátý ročník

Internet Information Services (IIS) 6.0

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

Vstup/Výstup, Sokety. Duben 2012

íta ové sít TCP/IP Protocol Family de facto Request for Comments

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP.

Site - Zapich. Varianta 1

Úvod Úrovňová architektura sítě Prvky síťové architektury Historie Příklady

Transportní vrstva. RNDr. Ing. Vladimir Smotlacha, Ph.D.

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Sít ová komunikace v C++

POČÍTAČOVÉ SÍTĚ Metodický list č. 1

4. Transportní vrstva

Teoretické minimum z PJV

Inovace bakalářského studijního oboru Aplikovaná chemie

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Desková hra Go pro více klientů Petr Lokvenc

Inovace bakalářského studijního oboru Aplikovaná chemie

RESTful API TAMZ 1. Cvičení 11

Principy fungování WWW serverů a browserů. Internetové publikování

Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v

Ing. Jitka Dařbujanová. , SSL, News, elektronické konference

Typický prvek kolekce pro české řazení

9. Sítě MS Windows. Distribuce Windows. Obchodní označení. Jednoduchý OS pro osobní počítače, pouze FAT, základní podpora peer to peer sítí,

Analýza aplikačních protokolů

JAVA V RMI Java, letní semestr

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Algoritmizace a programování

MODELY POČÍTAČOVÝCH SÍTÍ

Architektura TCP/IP je v současnosti

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP TCP/IP.

Počítačová síť a internet. V. Votruba

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Vytváření a použití knihoven tříd

Přístup k transportní vrstvě z vrstvy aplikační rozhraní služeb služby pro systémové aplikace, služby pro uživatelské aplikace DNS

Počítačové sítě ve vrstvách model ISO/OSI

Počítačové sítě. Počítačová síť. VYT Počítačové sítě

6. Transportní vrstva

Ing. Jitka Dařbujanová. TCP/IP, telnet, SSH, FTP

Tvorba informačních systémů

Bezpečnost v Javě. Architektura zabezpečení jazyka Java.

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Bezpečnostní problémy VoIP a jejich řešení

Transkript:

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Programování v jazyku Java Java a Internet, základní pojmy, socketové x datagramové spojení, klient - server architektura. BI-PJV Programování v jazyku Java Katedra teoretické informatiky Miroslav Balík Fakulta informačních technologií České vysoké učení technické

Přenos dat po síti Počítače používající Internet komunikují - užívají protokoly TCP a UDP. Javské programy komunikující po síti představují aplikační úroveň využívají třídy z balíčku java.net a tedy se nezabývají transportní úrovní. Java Java 2/29

Pojmy TCP (Transmission Control Protocol) connection-based - spolehlivý. Hyper Text Transfer Protocol ( HTTP ), File Transfer Protocol ( ftp ), and Telnet ( telnet ) - aplikace užívají TCP k vytvoření spolehlivého kanálu. URL ( Uniform Resource Locator ) adresa zdroje na Internetu. UDP ( User Datagram Protocol ) datagram based - nespolehlivá komunikace prostřednictvím nezávislých packetů, tzv. datagramů. Není zaručeno doručení, čas ani pořadí. Nepřijatý paket je ztracen. Port logická přípojka k síti určená 16-bitovým číslem, které TCP i UDP užívají k dodávce dat k příslušné aplikaci. K portu může být připojena jen jedna aplikace. 3/29

Pojmy IP ( Internet Protocol ) - IP address je 32-bitová identifikace fyzického připojení k síti. DNS (Domain Name System) jmenná vyhledávací služba. Connection-based komunikace ( jakoby telefonem ) - aplikace naváže spojení s jinou, tím, že sváže socket s číslem portu. Tím se aplikace registruje v systému a může předávat data přes tento port. Datagram-based komunikace ( jakoby poštou ) datagram obsahuje číslo portu pro adresaci aplikace. 4/29

Porty Porty jsou očíslovány 0-65535 přičemž rezervované porty mají čísla 0-1023 příkladně takto: Multicast IP (classd): 224.0.0.0.. 239.255.255.255 5/29

Třídy pro adresaci: InetAddress URL Třídy pro TCP komunikaci: URLConnection Socket ServerSocket Třídy pro UDP komunikaci: Výjimky: DatagramPacket DatagramSocket Balíček java.net MalformedURLException, ProtocolException, SocketException, ConnectException, PortUnreachableException, UnknownHostException, UnknownServiceException 6/29

Serializable java.net Socket Address Inet Address URI URL URL Connection InetSocket Address Inet4 Address Comparable JarURL Connection CookiePolicy Inet6 Address URL Decoder HttpURL Connection CookieStore URL Encoder HttpsURL Connection Proxy Selector Network Interface Proxy Password Authentification IDN Http Cookie 7/29

Datagram Packet Datagram Socket Socket Server Socket java.net Network Interface Multicast Socket SSL Socket SSLServer Socket SocketImplFactory DatagramSocket ImplFactory SocketOptions Socket Factory Server Socket Factory URLStream HandlerFactory Content Datagram SocketImpl Socket Impl SSLSocket Factory SSLServer Socket Factory HandlerFactory FileNameMap Authenticator Cache Request Cache Response Secure Cache Response Content Handler Cookie Handler Cookie Manager 8/29

Proudy, sockety a porty Spojení aplikací pomocí proudů propojených sockety. application socket socket application read write In Out Port 1234 Port 6789 Out In write read 9/29

URL Struktura URL protocol identifier : resource name // host : port / file # reference http ftp file:c jdbc:mysql jar příklady: http://147.32.232.248 file:c://temp/a.txt - in Win file:///home/k336/user/temp/a.txt - in Unix ftp://ftp.fit.cvut.cz/ http://www.oracle.com/us/sun/index.html http://java.sun.com/index.html#chapter1 10/29

Třída InetAddress představuje IP adresu, tj. 32 resp. 128 bitové číslo bez znaménka. Má potomky Inet4Address a Inet6Address. Adresa může být typu unicast nebo multicast, tj. paket se má dodat na jedno či více míst. Konvence: Adresa localhost odpovídá 127.0.0.1 - vhodné pro lokální testování. Statické metody: InetAddress getbyname( String host ) adresa hostitele dle DNS. InetAddress[ ] getallbyname( String host ) adresy hostitele dle DNS. InetAddress getbyaddress ( byte[ ] addr ) podle adresy InetAddress getlocalhost( ) adresa lokálního hostitele. Nestatické metody: byte [ ] getaddress( ) adresa po bytech. String gethostaddress( ) textová reprezentace adresy hostitele. String gethostname( ) jméno hostitele. 11/29

Třída InetAddress try { InetAddress a = InetAddress.getByName("fit.cvut.cz"); byte[] b = a.getaddress(); // rozklad na byty System.out.println(b[0] + "." + b[1] + "." + b[2] + "." + b[3]); a = InetAddress.getByName("111.111.111.111"); System.out.println(a.getHostName()); System.out.println(InetAddress.getLocalHost()); } catch (UnknownHostException uhx) {uhx.printstacktrace(); } -109??? = 147-109.32.3.83 kd111111111111.ppp-bb.dion.ne.jp TajfunZHor/192.186.5.65 12/29

Třída URL Vytváří neměnný ( immutable ) objekt, který vyjadřuje lokalitu zdroje - sám nepůsobí žádnou aktivitu. Přetížené konstruktory umožňují vytvořit URL jednak pomocí plné specifikace řetězem, jednak pomocí rozšíření existujícího URL. Nesprávné zadání vyhodí MalformedURLException. Metody: getprotocol( ), gethost( ), getfile( ),... umožňují vybírat části URL. URLConnection openconnection( ) - vrací objekt, který reprezentuje spojení se vzdáleným objektem. InputStream openstream( ) - vrací proud pro čtení vzdáleného objektu. ( Je to jen zkratka za openconnection( ).getinputstream( ) ) 13/29

try { Input via URL URL u = new URL("http://seznam.cz"); InputStream is = u.openstream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String s = ""; while ((s = br.readline())!= null) { System.out.println(s); } } catch (MalformedURLException murle) { murle.printstacktrace(); } catch (IOException ioe) { ioe.printstacktrace(); } 14/29

Abstraktní třída URLConnection je nadtřídou tříd reprezentující spoj mezi aplikací a URL pro čtení i zápis. Důležité metody: URL geturl( ) vrací relevantní URL String getcontenttype( ) popis typu. Není-li znám, pak null. int getcontentlength( ) délka zdroje. String getcontentencoding( ) zakódování zdroje. long getexpiration( ) doba vypršení. long getlastmodified( ) poslední modifikace void setdoinput( boolean doinput ) povolení čtení. Default je true. InputStream getinputstream( ) získání vstupního proudu. void setdooutput( boolean dooutput ) povolení zápisu. Default je false. OutputStream getoutputstream( ) získání výstupního proudu. 15/29

URLConnection Umožňuje získat informace o zdroji, vstupní i výstupní proud. try { URL u = new URL("http://seznam.cz"); URLConnection uc = u.openconnection(); System.out.println(uc.getContentType() + " " + uc.getcontentlength() + " " + uc.getexpiration() + " " + uc.getcontentencoding() + " " + new Date(uc.getLastModified())); System.out.println("************************"); InputStream is = uc.getinputstream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String s = ""; while ((s = br.readline())!= null) { System.out.println(s); //výpis kódu stránky } } catch (MalformedURLException murle) { } catch (IOException ioe){ } 16/29

I/O via URLConnection URL u = new URL( "http://java.sun.com/cgi-bin/backwards" ); URLConnection uc = u.openconnection( ); uc.setdooutput( true ); String s = ABCD"; // stringtoreverse PrintWriter writer = new PrintWriter( uc.getoutputstream( ) ); writer.println( "string=" + s ); writer.close( ); InputStream is = uc.getinputstream( ); BufferedReader br = new BufferedReader( new InputStreamReader( is ) ); while ( ( s = br.readline( ) )!= null ) System.out.println( s ); 17/29

Komunikace UDP addr port String byte[ ] ABC A B C datagram header A B C socket port xxxx port yyyy socket send receive datagram header A B C byte[ ] addr port A B C String ABC 18/29

Třída DatagramPacket Přetížené konstruktory mají parametry: byte[ ] buf odtud se bere zpráva ( možno specifikovat ofset a délku ). InetAddress adresát. SocketAddress socket adresáta. Nestatické metody: InetAddress getaddress( ) adresa adresáta nebo odesitatele. void setaddress( InetAddress addr ) nastavení adresáta. int getport( ) vrací číslo portu v datagramu. void setport( int port ) nastavení čísla portu v datagramu. byte[ ] getdata( ) přístup k datům v datagramu. void setdata( byte[ ] buf ) vložení dat do datagramu. 19/29

Třída DatagramSocket DatagramSocket se podobá poštovní schránce - odesílací i příjímací. Přetížené konstruktory mají parametry: InetAddress adresát. SocketAddress socket adresáta. int port port adresáta či odesílatele. Důležité nestatické metody: void send( DatagramPacket packet ) odeslání datagramu. void receive( DatagramPacket packet ) příjem datagramu. void bind( SocketAddress addr ) váže socket s adresou a portem. close( ) uzavření. void setbroadcast( boolean on ) nastavení adresáta. int getport( ) vrací číslo portu socketu. void connect( InetAddress addr, int port ) spojení k adresátovi. 20/29

Datagram transport int port = 6010; String s = "toto chceme odeslat"; byte[ ] message = s.getbytes( ); InetAddress addr = InetAddress.getByName( "127.0.0.1" ); DatagramPacket packet = // create packet new DatagramPacket( message, message.length, addr, port ); DatagramSocket socket = new DatagramSocket( ); // create socket socket.send( packet ); // send packet 21/29

Datagram transport // *** RECEIVE *** byte[ ] buffer = new byte[1024]; DatagramSocket socket = new DatagramSocket( 6010 ); // on port DatagramPacket packet = new DatagramPacket( buffer, buffer.length ); socket.receive( packet ); // wait to receive String s = new String( buffer, 0, packet.getlength( ) ); 22/29

Řešení klient - server host Telephonist ServerSocket accept( ) ) port 1111 ServerSocket naslouchá volání klienta, zřídí na své straně Socket a zajistí jeho spojení s klientovým Socketem. Clerk # Client # read write In Out Socket port xxxx port yyyy Socket( host,1111 ) Out In write read 23/29

Třída Socket Socket připomíná telefonní zásuvku se dvěmi zdířkami pro in a out streamy. Přetížené konstruktory mají více parametrů: InetAddress adresát či lokální adresát. String host hostitel. int port port adresáta či lokálního adresáta. Důležité nestatické metody: InputStream getinputstream( ) získání vstupního proudu. OutputStream getoutputstream( ) získání výstupního proudu. void bind( SocketAddress a ) váže socket s lokální adresou a portem. void connect( SocketAddress endpoint ) spojení se serverem. close( ) uzavření. Tato třída obsahuje mnoho dalších metod pro důmyslné operace. 24/29

Třída ServerSocket ServerSocket připomíná firemní telefonní ústřednu kam volají klienti a která je předá příslušnému referentovi - nově vytvořenému. Přetížené konstruktory mají více parametrů. Postačí však i jen: int port port serveru. Důležité nestatické metody: Socket accept( ) čeká na spojení iniciované klientem, pak vytvoří a vrátí další objekt Socket pro styk s klientem. void bind( SocketAddress a ) váže socket s lokální adresou a portem. close( ) uzavření. Tato třída obsahuje mnoho dalších metod pro důmyslné operace. 25/29

Klient Socket s = new Socket("localhost", 1111); // IP-adresa & server port BufferedReader si = new BufferedReader( new InputStreamReader(s.getInputStream())); PrintWriter so = new PrintWriter(s.getOutputStream(), true); so.println("tady Petr, kdo tam?"); //odešli požadavek na server String ans = si.readline(); // přečti odpověď if (ans!= null) { System.out.println("Klient:" + ans); // vypiš odpověď } else { System.out.println("Klient: bez odpovědi"); // konec komunikace } if (s!= null) { } s.close(); // zavři socket 26/29

Telephonist class Telephonist implements Runnable { ServerSocket ss; public Telephonist() { try { ss = new ServerSocket(1111); // poslouchám na portu } catch (IOException ioe) { ioe.printstacktrace(); } } public void run() { try { while (true) { //nekonečný příběh Socket s = ss.accept(); //počkáme na zavolání Clerk c = new Clerk(s); //vytvoř obsluhu (new Thread(c)).start(); // odstartuj jej } } catch (Exception ex) { System.out.println(ex); } } } 27/29

Clerk ublic class Clerk implements Runnable { Socket s; public Clerk(Socket s) { this.s = s; } public void run() { try { BufferedReader si = new BufferedReader( new InputStreamReader( s.getinputstream())); PrintWriter so = new PrintWriter(s.getOutputStream(), true /* autoflush */); String r = si.readline(); while (!r.equals("")) { System.out.println("Server přijal: " + r); r = si.readline(); // read client s request so.println("bla BLA!");// send clerk s reply } } catch (Exception ex) { System.out.println(ex); } finally { if (s!= null) { try { s.close(); } catch (IOException ioe) {...} } } } } 28/29

Spuštění - ústředna Telephonist server = new Telephonist(); Thread tel = new Thread(server); tel.start(); Thread kl1 = new Thread(new Klient()); kl1.start(); Thread kl2 = new Thread(new Klient()); kl2.start(); 29/29