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ý.
Při implementaci TCP klienta musíme provézt následující kroky:
Jednoduchý program klienta (TcpClient.java) může vypadat následovně.
Při implementaci TCP serveru musíme provézt následující kroky:
Jednoduchý program serveru (TcpServer.java) může vypadat následovně.
Třída ServerSocket implementuje socket TCP serveru. Obsahuje tři konstruktory, které specifikují
port, na kterém server naslouchá
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:
accept() způsobí, že socket serveru bude naslouchat a čekat na příchod požadavku navázání spojení. Po navázání spojení vrací metoda accept() instanci objektu třídy Socket. Tento objekt je pak použit pro zajištění služby pro jednoho klienta.
getInetAddress() vrací adresu hostitelského počítače se kterým je socket spojen.
getLocalPort() vrací číslo portu, na kterém server naslouchá.
toString() vrací adresu a číslo portu v podobě vhodné k tisku.
getSoTimeout() a setSoTimeout() nastavuje hodnotu parametru SO_TIMEOUT.
close() uzavírá socket serveru.
setSocketFactory(), statická metoda, je použita pro změnu implicitního nastavení parametrů ServerSocket.
implAccept() je použita podtřídou ServerSocket k přepsání metody accept().
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
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í.
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.
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ě.
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 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.
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.