August 2000
Intermediate to advanced
760 pages
21h
English
Most multicast servers are indiscriminate about who they will talk
to. Therefore, it’s easy to join a group—and watch the
data that’s being sent to it. Example 14.1 is a
MulticastSniffer class that reads the name of a
multicast group from the command-line, constructs an
InetAddress from that hostname, and then creates a
MulticastSocket, which attempts to join the
multicast group at that hostname. If the attempt succeeds, it
receives datagrams from the socket and prints their contents on
System.out. This program is useful primarily to
verify that you are receiving multicast data at a particular host.
Most multicast data is binary and won’t be intelligible when
printed as ASCII.
Example 14-1. Multicast Sniffer
import java.net.*; import java.io.*; public class MulticastSniffer { public static void main(String[] args) { InetAddress group = null; int port = 0; // read the address from the command line try { group = InetAddress.getByName(args[0]); port = Integer.parseInt(args[1]); } // end try catch (Exception e) { // ArrayIndexOutOfBoundsException, NumberFormatException, // or UnknownHostException System.err.println( "Usage: java MulticastSniffer multicast_address port"); System.exit(1); } MulticastSocket ms = null; try { ms = new MulticastSocket(port); ms.joinGroup(group); byte[] buffer = new byte[8192]; while (true) { DatagramPacket dp = new DatagramPacket(buffer, buffer.length); ms.receive(dp); String s = new String(dp.getData( )); System.out.println(s); } } catch ...