12.07.2015 Views

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

Untitled - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P R O G R A M U J E M Etov – Java mlèky predpokladá prítomnos TCP/IP (èo je však úplne logické, majorita súèasnýchsietí používa protokoly rodiny TCP/IP).Na reprezentáciu adries IP (protokolu IPv4) je k dispozícii trieda InetAddress. Èo jezvláštne, táto trieda nemá nijaký konštruktor (teda aspoò nie verejne prístupný), <strong>na</strong> vytvorenieobjektu typu InetAddress treba použi jednu zo statických metód getLocalHost(),getByName(), getAllByName(). Prvá z metód vracia objekt reprezentujúcilokálnu adresu IP, druhá a tretia vracajú objekt, resp. pole objektov predstavujúcichjednu adresu IP alebo množinu všetkých možných adries IP poèítaèa špecifikovanéhopomocou re azca s doménovým menom alebo s adresou IP v bodkovom zápise (ako<strong>na</strong>pr. “195.168.1.4“).Medzi ïalšie metódy triedy InetAddress patria: isMulticastAddress() – slúži <strong>na</strong>rozpoz<strong>na</strong>nie multicast adries (to sú adresy triedy D, zaèí<strong>na</strong>júce sa bitmi 1110), get-HostName() – vracia doménové meno patriace k danej adrese IP, getHostAddress()– vracia adresu IP ako re azec v bodkovom zápise a getAddress() – vracia adresu IPako pole štyroch bajtov.Výz<strong>na</strong>m triedy URL je zrejmý. Na zopakovanie: URL (= Uniform Resource Locator)predstavuje spôsob, ako <strong>na</strong> internete možno odkazova <strong>na</strong> rôzne prostriedky (ako <strong>na</strong>pr.stránky, súbory, mailové schránky). URL pozostáva zo špecifikácie protokolu, názvu cie-¾ového poèítaèa, volite¾ného èísla portu, <strong>na</strong> ktorom prebieha komunikácia, a cesty, ktorájednoz<strong>na</strong>ène identifikuje prostriedok. Trieda URL obsahuje viacero konštruktorov, novúinštanciu možno zostroji <strong>na</strong>príklad takto:URL url = new URL(„http“, „<strong>www</strong>.niekde.<strong>sk</strong>“, 80, „/index.htm“);ale aj takto:URL url = new URL(„http://<strong>www</strong>.niekde.<strong>sk</strong>:8080/index.htm“);Metódy getQuery(), getPath(), getUserInfo(), getAuthority(), get-Port(), getProtocol(), getHost(), getFile() a getRef() vracajú rozlièné zložkyURL (pod query sa rozumie èas cesty za prípadným z<strong>na</strong>kom ?, authority je zloženi<strong>na</strong>host:port, resp. user@host:port, a ref je èas cesty za prípadným z<strong>na</strong>kom #). MetódousameFile() môžeme zis ova zhodu dvoch URL s vylúèením zložky ref. Pomocou metódytoExter<strong>na</strong>lForm() zí<strong>sk</strong>ame URL v tvare súvislého re azca. Dôležitá metódaopenConnection() vráti objekt URLConnection (pozri ïalej), ktorý reprezentujesie ové spojenie so zadaným URL. Podobne metóda openStream() vytvorí spojenie sURL a vráti vstupný prúd <strong>na</strong> èítanie z tohto spojenia. Pomocou metódy getContent()zí<strong>sk</strong>ame obsah URL vo forme javov<strong>sk</strong>ého objektu.Komunikaèné spojenie medzi javov<strong>sk</strong>ou aplikáciou a URL zabezpeèuje abstraktná triedaURLConnection. Konštruktor tejto triedy je chránený, nové objekty zí<strong>sk</strong>ame volanímmetódy openConnection() <strong>na</strong>d objektom typu URL. Trieda obsahuje množstvo metód,z tých výz<strong>na</strong>mnejších vyberáme: connect() – fyzicky zrealizuje požadované spojenie(teda prepojí obe komunikujúce strany), getContentLength(), getContentType(),getContentEncoding(), getExpiration(), getDate() a getLastModified() –vracajú rov<strong>na</strong>ko pomenované polia hlavièky, <strong>na</strong>chádzajúcej sa <strong>na</strong> zaèiatku odpovedevzdialeného poèítaèa (spomeòme si hoci <strong>na</strong> polia štandardnej hlavièky HTTP), ve¾midôležitá metóda getContent() – vracia samotný dátový obsah URL, getInput-Stream()/getOutputStream() – vracajú prúdy <strong>na</strong> èítanie alebo zápis z/do spojenia, amnoho ïalších.Java po<strong>sk</strong>ytuje dve inkarnácie triedy URLConnection – pre HTTP spojenia je toHttpURLConnection a pre spojenia k archívom JAR zase JarURLConnection. Obetriedy sú abstraktné, takže <strong>sk</strong>utoèná implementácia spojení je záležitos ou konkrétnehoJVM. V triede HttpURLConnection nájdeme množstvo statických finálnych èlenov,reprezentujúcich stavové kódy protokolu HTTP a nieko¾ko špecifických metód: setFollowRedirects()– zapí<strong>na</strong> èi vypí<strong>na</strong> automatické presmerovanie (pri vrátení kódu 3xx),setRequestMethod() – <strong>na</strong>stavuje prístupovú metódu (GET, POST a pod.), getResponseCode(),getResponseMessage() – vracajú návratový kód, resp. návratovú správuHTTP protokolu, ako aj nieko¾ko ïalších, menej výz<strong>na</strong>mných metód.Druhá trieda JarURLConnection sa dostáva k slovu pri prístupe k súborom JAR –URL má vtedy formát jar:http://<strong>www</strong>.niekde.<strong>sk</strong>/archiv.jar!/<strong>sk</strong>/niekde/foo/bar.class (ako vidie , za výkrièníkom sa <strong>na</strong>chádza cesta ku konkrétnej triede –položke súboru JAR). Z metód triedy spomenieme getEntryName() – vracia názov sprístupòovanejpoložky, getJarFile(), getJarEntry(), getManifest(), getAttributes()– vracajú objekty typu JarFile, JarEntry, Manifest, Attributes (pozribalík java.util.jar).Príklad, ako vypísa HTML obsah vybranej webovej stránky (obsah, pochopite¾ne, nie jenijako interpretovaný):URL url = new URL(„http://<strong>www</strong>.pcrevue.<strong>sk</strong>/“);URLConnection uc = url.openConnection();uc.connect();BufferedReader br =new BufferedReader(new InputStreamReader(uc.getInputStream()));while (true){String line = br.readLine();if (line == null)break;System.out.println(line);}Všimnite si, že sa vôbec nestaráme o to, akého typu je objekt uc v <strong>sk</strong>utoènosti.Okrem komunikácie so zadaným URL možno v Jave vytvori spojenie priamo medzidvoma soketmi (soket je koncový komunikaèný bod, identifikovaný adresou IP a èíslomportu). Trieda Socket reprezentuje klient<strong>sk</strong>y soket pre prúdovú komunikáciu pomocouTCP. Pri jej konštrukcii môžeme zada cie¾ovú adresu a port (soket sa potom automatickyspojí so svojím náprotivkom) a aj lokálnu adresu a port (to keï chceme „vysiela “ z konkrétnehoportu). Metódami getInetAddress(), getLocalAddress(), getPort() agetLocalPort() zistíme vlastnosti soketu, pomocou getInputStream() a getOutputStream()zí<strong>sk</strong>ame prúdy <strong>na</strong> èítanie a zápis z/do soketu. Metóda close() ukonèíkomunikáciu a soket uzavrie. Nieko¾ko ïalších metód slúži <strong>na</strong> <strong>na</strong>stavenie parametrovkomunikácie. Zaujímavé je, že samotnú komunikáciu realizuje objekt typu SocketImpl(abstraktná trieda). Pokia¾ si však nechceme <strong>na</strong>písa vlastnú implementáciu soketov, nieje táto trieda zaujímavá.Ak programujeme serverovú èas aplikácie, použijeme triedu ServerSocket.Argumentom jej konštruktora je èíslo portu, <strong>na</strong> ktorom bude soket poèúva .Najdôležitejšou metódou je accept(), ktorej volanie je blokujúce – metóda èaká, až sa<strong>na</strong> soket pripojí klient „zvonka“. V tom okamihu vracia objekt typu Socket, pomocouktorého možno s klientom komunikova štandardným spôsobom. Z ïalších metódmedzi tie zaujímavejšie patrí getInetAddress(), getLocalPort() a close() s výz<strong>na</strong>momrov<strong>na</strong>kým ako v triede Socket.Ako vyzerá kostra serverovej aplikácie, možno lepšie pochopi z <strong>na</strong>sledujúceho príkladu:ServerSocket ss = new ServerSocket(12345);while (true){Socket cs = ss.accept();BufferedReader br =new BufferedReader(new InputStreamReader(cs.getInputStream()));while (true){String ln = br.readLine();if (ln == null)break;System.out.println(ln);}cs.close();}(Kompletnejšiu verziu nájde èitate¾ spolu s ostatnými príkladmi <strong>na</strong> webe PC REVUE.)V príklade vytvoríme serverový soket ss, poèúvajúci <strong>na</strong> porte è. 12345. V nekoneènomcykle pomocou metódy accept() zí<strong>sk</strong>ame klient<strong>sk</strong>y soket cs, z ktorého èítameriadky textu a vypisujeme <strong>na</strong> konzolu. Na otestovanie je potrebné pripoji sa k poèítaèu,<strong>na</strong> ktorom program beží, <strong>na</strong>príklad pomocou telnetu (ale <strong>na</strong> porte 12345!). Posielanériadky sa budú postupne objavova <strong>na</strong> konzole. Program sa ukonèí stlaèením Ctrl+C.Na datagramový prenos pomocou protokolu UDP (bez spojenia, nezabezpeèený) slúžitrieda DatagramSocket. Pri jej konštruovaní môžeme zada èíslo lokálneho portu soketu.Pripojenie k zadanej vzdialenej adrese (pozor, nie vytvorenie sie ového spojenia akopri TCP) má <strong>na</strong> starosti metóda connect(), odpojenie metóda disconnect(). Na príjema odosielanie údajov slúžia metódy send() a receive(), soket uzavrieme volanímclose(). Ostatné metódy sú podobné ako v triede Socket, implementáciu soketovzabezpeèuje trieda DatagramSocketImpl.Keïže v prípade UDP nejde o prúdový prenos, nepracujeme s prúdmi, ale s objektomtriedy DatagramPacket (ten je ostatne argumentom oboch metód – send() ajreceive()). Pri jeho konštruovaní zadávame pole bajtov, ktoré bude fungova ako prijímacíalebo vysielací buffer, a pri odosielaných datagramoch aj cie¾ovú adresu. Pomocoumetód triedy DatagramPacket môžeme <strong>na</strong>stavova a zisti zdrojovú, resp. cie¾ovú adresua port, dåžku údajov a samotné údaje.Na záver spomeòme ešte výnimky: MalformedURLException (chyba v syntaxi URL),ProtocolException (chyba <strong>na</strong> úrovni prenosového protokolu), SocketException spotomkami (chyba pri práci so soketmi), UnknownHostException (chyba pri prekladepomocou DNS) a UnknownServiceException (pokus o prácu s neznámym MIMEtypom).Žia¾, <strong>na</strong> viac z balíka java.net nemáme miesto. Zvyšné triedy slúžia <strong>na</strong>príklad <strong>na</strong>implementáciu multicast soketov (MulticastSocket), zabezpeèenie prístupových práv(SocketPermission, NetPermission, Authenticator), prácu s URL a interpretáciuobsahu (ContentHandler, URLStreamHandler) èi konverziu medzi typom Stringa MIME typom x-<strong>www</strong>-form-urlencoded (URLEncoder, URLDecoder). Záujemca si viacinformácií isto nájde priamo v dokumentácii.Vladimír Klimov<strong>sk</strong>ý10/2001 PC REVUE 127

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!