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.