Java Reference
In-Depth Information
interface has been explicitly set in the constructor or with
setNetworkInterface()
, it
returns a placeholder object with the address “0.0.0.0” and the index -1. For example,
this code fragment prints the network interface used by a socket:
NetworkInterface
intf
=
ms
.
getNetworkInterface
();
System
.
out
.
println
(
intf
.
getName
());
Two Simple Examples
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 13-1
is a
MulticastS
niffer
class that reads the name of a multicast group from the command line, constructs
an
InetAddress
from that hostname, and creates a
MulticastSocket
, which attempts
to join the multicast group at that hostname. If the attempt succeeds,
MulticastSniff
er
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 text.
Example 13-1. Multicast sniffer
import
java.io.*
;
import
java.net.*
;
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
]);
}
catch
(
ArrayIndexOutOfBoundsException
|
NumberFormatException
|
UnknownHostException
ex
)
{
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
);