Příklady Java Networking

Jednoduchý příklad spojově orientované komunikace a metody třídy ServerSocket

 Základní komponenty TCP komunikace

 Příklad ukazuje základní kroky nutné při vytváření TCP spojení. Nezbytné komponenty pro jakoukoliv komunikaci jsou:

Pro komunikace pomocí TCP jsou nutné následující kroky:

V tomto případě je aplikační komunikační protokol velmi jednoduchý.

 Implementace TCP klienta

 Při implementaci TCP klienta musíme provézt následující kroky:

 Jednoduchý program klienta (TcpClient.java) může vypadat následovně.

 Implementace TCP serveru

 Při implementaci TCP serveru musíme provézt následující kroky:

 Jednoduchý program serveru (TcpServer.java) může vypadat následovně.

Metody třídy SocketServer

Třída ServerSocket implementuje socket TCP serveru. Obsahuje tři konstruktory, které specifikují

Zadání internetové adresy dovoluje vytvářet multihomed hosts, tj. počítače s přiřazenými dvěma a více internetovými adresami, aby se omezil počet spojení na specifickém rozhraní.

 ServerSocket obsahuje následující metody:

Následující aplikace ReverseServerApp.java je jednoduchý server, který naslouchá na portu 1234. Po navázání spojení přečte jeden řádek textu, změní pořadí znaků na opačné a takto upravenou řádku textu pošle zpět klientovi. Spusťte nejprve server

> java ReverseServerApp

a pak klienta, např. PortTalkApp

>java PortTalkApp localhost 1234

Metody třídy socket

 Třída socket implementuje klientské sockety. Tyto sockety jsou určeny pro aplikace, komunikující se servery pomocí protokolu TCP.

Metody třídy socket se používají pro přístup k I/O streamům a parametrům spojení které jsou propojeny se spojeným socketem. Mezi tyto metody patří:

 Následující program PortTalkApp.java je určen ke komunikaci se vzdáleným počítačem. Dovoluje vysílat řádky textu, přijímat řádky textu a ukončovat spojení.

Modifikace serveru i klienta umožňující výměnu více zpráv během jednoho spojení.

Abychom mohli přenést během jednoho spojení více zpráv, je třeba definovat modifikovaný aplikační komunikační protokol, který by to dovoloval. Např.:

Server:

Klient:

Realizaci serveru představuje program  TcpServer1.java a program klienta je uložen v souboru TcpClient1.java.

Spouštění programů na počítačích sítě

Pokud známe IP adresu nebo jméno serveru, můžeme s ním komunikovat námi vytvořenými klienty. Předložený program (InetExample.java) slouží k získání detailnějších informací o vzdáleném hostitelském systému.

Upravený klient (TcpClient2.java) umožňuje komunikovat se vzdáleným serverem prostřednictvím počítačové sítě.

Podpora více klientů

 Abychom mohli podporovat více klientů, musíme pozměnit program serveru. Program klientů zůstává stejný. Po inicializaci serveru obdržíme ServerSocket a čekáme na navázání spojení klientem. Jakmile je spojení od klienta akceptováno, použijeme vlákno ke zpracování navázaného spojení. Server poté opět čeká na požadavek nového spojení. Klienti mohou poslat dva příkazy serveru. „Client Exit“ znamená ukončení práce klienta, „Server Exit“ znamená požadavek ukončení běhu serveru. Příklad serveru je uveden v souboru TcpServer3.java.

Datagramové služby

Datagramové služby jsou podporovány v balíku java.net dvěma třídami, DatagramSocket a DatagramPacket. DatagramSocket je interface přes který je DatagramPacket přenášen. DatagramPacket je jednoduše IP specifický wrapper pro blok dat.

Třída DatagramSocket představuje interface pro UDP protokol. Tato třída je schopna posílat a přijímat DatagramPacket přes UDP protokol. Nejčastěji požívané metody třídy DatagramSocket jsou:

Je třeba si uvědomit, že DatagramSocket jsou dva. Jeden pro příjem DatagramPackets, u kterého se specifikuje číslo lokálního portu, a jeden pro vysílání, kterému je číslo lokálního portu přiděleno systémem jako dočasné.

DatagramSocket reprezentuje datagram, přenášený prostřednictvím DatagramSocket. Nejčastěji používané metody třídy DatagramPacket jsou:

Datagramy je možné přenášet i s použitím třídy Socket. Musí se ale použít konstruktor Socket(InetAddress address, int port, Boolean useStream) a nastavit useStream na false.

Následující příklad slouží k testování obsazenosti UDP portů lokálního počítače.

Posílání a příjem UDP datagramů

Nejdříve se musí vytvořit DatagramPacket(), pak se vytvoří objekt DatagramSocket(), který se odešle metodou send().

Při příjmu se nejprve vytvoří objekt DatagramSocket nad daným portem a pošle se mu prázdný objekt DatagramPacket motodou DatagramSocket.receive(). Volající vlákno je blokováno dokud není datagram přijat. Pro zjištění adresy a portu volajícího lze použít metodu getPort() a getAddress(). Metoda getData() přenese data a metoda getLength() slouží k určení, jak jsou data dlouhá. Jsou-li přijímaná data delší než je velikost místa rezervovaného v bufferu, jsou data zkrácena na délku bufferu.

Jednoduchý datagramový server má následující strukturu:

Toto je příklad serveru pro datagramovou komunikaci.

Jednoduchý datagramový klient má následující strukturu:

Toto je příklad klienta pro datagramovou komunikaci, který spolupracuje s výše uvedeným serverem.