java.sun.com Technológie JavaTM - cvičenia
Cvičenie 13
Téma

Sieťové aplikácie - úvod
TCP (Transmission Control Protocol)
UDP (User Datagram Protocol)
Porty
URL (Uniform Resource Locator)
Aplikácie klient-server

Sieťové aplikácie - úvod

Počítače vrámci Internetu komunikujú navzájom protokolom TCP (Transmission Control Protocol) alebo UDP (User Datagram Protocol). Nasledujúci obrázok znázorňuje vrstvy TCP/IP sieťového modelu.

V prípade, že vytvárame program komunikujúci po sieti, pracuje s aplikačnou vrstvou. Napriek tomu sú nutné aj znalosti nižších vrstiev (hlavne transportnej) pretože poskytujú služby vrstvám vyšším.

TCP (Transmission Control Protocol)

TCP je spojovo-orientovaný protokol, ktorý zabezpečuje tok informácií medzi koncovými stanicami (počítačmi). Zároveň je overovaná úspešnosť doručenia informácie cieľovej stanici. Taktiež je garantované poradie príjmania dát (Skôr poslané dáta budú skôr doručené).

UDP (User Datagram Protocol)

UDP je protokol, ktorý slúži na posielanie blokov dát (packetov) bez overenia úspešnosti doručenia. Pri tomto protokole nemusí platiť, že skôr poslané dáta budú aj skôr doručené ako dáta poslané neskôr. Tento protokol je z dôvodov uvedených jednoduchší ako predchádzajúci protokol TCP a tým aj menej zaťažuje prenosové pásmo. Ak sa vám zdá nepoužiteľný z dôvodu možnej nespoľahlivosti nie je to celkom tak. Existuje mnoho aplikácií (hlavne aplikácie reálneho času), ktoré nie sú viazané len na obsah prenosu ale aj čas doručenia. V prípade chyby prenosu nemá zmysel prenos opakovať, pretože údaj už nemusí byť platný. Takýmto príkladom môže byť prenos informácie o čase.
V prípade požiadavky spoľahlivého prenosu je nutné použiť protokol TCP, resp. zabezpečiť si spoľahlivosť UDP vlastnou kontrolou prenosu (Čo však mať za následok zložitosť samotnej aplikácie a zvyšuje objem prenášaných dát.).

Porty

Počítač je vo väčšine prípadov pripojený k počítačovej sieti jediným rozhraním. Po tomto rozhraní putujú informácie, ktoré predstavujú sieťovú komunikáciu. V tom istom čase však môže pracovať so sieťou viacero aplikácií (napr. WWW server, FTP server, SMTP server). V tomto prípade je nutné určiť adresáta (aplikáciu), ktorému patria dáta vrámci jednej koncovej stanice. Práve na toto odlíšenie existujú porty v protokoloch TCP a UDP.

V protokoloch UDP a TCP sa porty používajú na mapovanie prichádzajúcich dát na príslušný bežiaci proces na cieľovej stanici.

Porty sú očíslované od 0 do 65535 - 16 bitové číslo. Porty od 0-1023 sú však pridelené štandardným aplikáciám. Pre vlastnú potrebu sa používajú porty mimo tohto rozsahu. Pridelené porty je možné nájsť v RFC 1700 http://www.faqs.org/rfcs/rfc1700.html.

Nasledujúca tabuľka prezentuje niekoľko pridelených čísel portov:

Port Popis
7 Echo
13 Daytime
20 File Transfer [Default Data]
21 File Transfer [Control]
23 Telnet
25 Simple Mail Transfer
80 World Wide Web HTTP

URL (Uniform Resource Locator)

URL predstavuje adresu zdroja (referenciu) na Internete.
URL pozostáva z dvoch základných častí:

  • identifikátoru protokolu
  • mena zdroja

Meno zdroja môže pozostávať (iba prvá časť je nutná):
  1. Meno hostiteľského počítača - meno hostiteľského počítača na ktorom je zdroj umiestnený
  2. Meno súboru - cesta k súboru so zdrojom
  3. Číslo portu - port cez, ktorý prebieha komunikácia
  4. Referencia - referencia na určitú časť vrámci zdroja (súboru)

Java poskytuje na tvorbu aplikácií komunikujúcich po sieti balík java.net. Trieda URL popisuje URL. Na získanie častí URL je možné použiť funkcie:

	String getProtocol()
	String getHost()
	String getPath()
	String getPort()
	String getRef()
	
Java zároveň ponúka jednoduchú možnosť získania špecifikované zdroja - t.j. umožňuje čítať priamo z URL. Použitím funkcie openStream() priamo získame stream na dané URL. S týmto streamom je potom možné pracovať ako so vstupným streamom, viď Cvičenie 7.

Zdrojový text príkladu URLReader.java.

	import java.net.*;
	import java.io.*;

	public class URLReader {
		public static final String resource="http://hornad.fei.tuke.sk/kpi/index.html";

	    public static void main(String[] args) throws Exception {
		URL url = new URL(resource);
		InputStream in=url.openStream();

	        int c;
	        while((c=in.read())!=-1){
	            System.out.print((char)c);
	        }

		in.close();
	    }
	}
	

Aplikácie klient-server

Nasledujúci príklad prezentuje jednoduchú aplikáciu Echo. Po spustení EchoServer čaká server na pripojenie klienta. Klient je implementovaný v súbore EchoClient.java. Po pripojení klient posiela riadky textu na server a ten ich nezmenené posiela naspäť (echo).
Zdrojové texty: EchoClient.java, EchoServerOneClient.java

Vzhľadom na to, že server pracuje len ako jedno vlákno, nemôže súčasne obsluhovať viacero klientov. Vylepšením je server pre ľubovoľný počet súčasne pripojiteľných klientov - implementácia pomocou vlákna pre každého pripojeného klienta EchoServer.java.

Záverom je prezentovaná aplikácia klient-server - triviálny chatovací program. Pozostáva zo serveru, na ktorý sa pripájajú klienti.
Zdrojové texty: ChatClient.java, ChatServer.java

Zhrnutie

  1. Popíšte sieťový model TCP/IP?
  2. Charakterizujte protokol TCP?
  3. Charakterizujte protokol UDP?
  4. Na čo slúžia porty?
  5. Čo je to URL?