Mega Code Archive

 
Categories / Java / Network Protocol
 

Waits to receive datagrams sent the specified port

import java.net.DatagramPacket; import java.net.DatagramSocket; /**  * This program waits to receive datagrams sent the specified port. When it  * receives one, it displays the sending host and prints the contents of the  * datagram as a string. Then it loops and waits again.  */ public class UDPReceive {   public static final String usage = "Usage: java UDPReceive <port>";   public static void main(String args[]) {     try {       if (args.length != 1)         throw new IllegalArgumentException("Wrong number of args");       // Get the port from the command line       int port = Integer.parseInt(args[0]);       // Create a socket to listen on the port.       DatagramSocket dsocket = new DatagramSocket(port);       // Create a buffer to read datagrams into. If anyone sends us a       // packet containing more than will fit into this buffer, the       // excess will simply be discarded!       byte[] buffer = new byte[2048];       // Create a packet to receive data into the buffer       DatagramPacket packet = new DatagramPacket(buffer, buffer.length);       // Now loop forever, waiting to receive packets and printing them.       for (;;) {         // Wait to receive a datagram         dsocket.receive(packet);         // Decode the bytes of the packet to characters, using the         // UTF-8 encoding, and then display those characters.         String msg = new String(buffer, 0, packet.getLength(), "UTF-8");         System.out.println(packet.getAddress().getHostName() + ": " + msg);         // Reset the length of the packet before reusing it.         // Prior to Java 1.1, we'd just create a new packet each time.         packet.setLength(buffer.length);       }     } catch (Exception e) {       System.err.println(e);       System.err.println(usage);     }   } }