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.