This class implements a communication channel
based on network datagrams. Obtain a
DatagramChannel by calling the static
open( )
method. Call socket(
) to obtain the java.net.DatagramSocket
object on which the channel is based if you need to set any socket
options to control low-level networking details.
The send( )
method sends the remaining bytes of the
specified ByteBuffer to the host and port
specified in the java.net.SocketAddress in the
form of a datagram. receive( ) does the opposite:
it receives a datagram, stores its content into the specified buffer
(discarding any bytes that do not fit) and then returns a
SocketAddress that specifies the sender of the
datagram (or returns null if the channel was in
nonblocking mode and no datagram was waiting).
The send( ) and receive( )
methods typically perform security checks on each invocation to see
if the application has permissions to communicate with the remote
host. If your application will use a
DatagramChannel to exchange datagrams with a
single remote host and port, use the connect(
)
method to connect to a specified SocketAddress.
The connect( ) method performs the required
security checks once and allows future communication with the
specified address without the overhead. Once a
DatagramChannel is connected, you can use the
standard read( )
and
write( ) methods defined by the
ReadableByteChannel,
WritableByteChannel,
GatheringByteChannel and
ScatteringByteChannel interfaces. Like the
receive( ) method, the read( )
methods silently discard any received bytes that do not fit in the
specified ByteBuffer. The read(
) and write( ) methods throw a
NotYetConnected exception if connect(
) has not been called.
DatagramChannel is a
SelectableChannel; its validOps(
)
method specifies that read and write operations may be selected.
DatagramChannel objects are thread-safe. Read and
write operations may proceed concurrently, but the class ensures that
only one thread may read and one thread write at a time.
Figure 13-2. java.nio.channels.DatagramChannel
public abstract class
DatagramChannel extends java.nio.channels.spi.
AbstractSelectableChannel
implements ByteChannel, GatheringByteChannel, ScatteringByteChannel {
// Protected Constructors
protected
DatagramChannel (java.nio.channels.spi.SelectorProvider
provider );
// Public Class Methods
public static DatagramChannel
open ( ) throws java.io.IOException;
// Public Instance Methods
public abstract DatagramChannel
connect (java.net.SocketAddress
remote )
throws java.io.IOException;
public abstract DatagramChannel
disconnect ( ) throws java.io.IOException;
public abstract boolean
isConnected ( );
public abstract java.net.SocketAddress
receive (java.nio.ByteBuffer
dst )
throws java.io.IOException;
public abstract int
send (java.nio.ByteBuffer
src , java.net.SocketAddress
target ) throws java.io.IOException;
public abstract java.net.DatagramSocket
socket ( );
// Methods Implementing GatheringByteChannel
public final long
write (java.nio.ByteBuffer[ ]
srcs )
throws java.io.IOException;
public abstract long
write (java.nio.ByteBuffer[ ]
srcs , int
offset ,
int
length ) throws java.io.IOException;
// Methods Implementing ReadableByteChannel
public abstract int
read (java.nio.ByteBuffer
dst )
throws java.io.IOException;
// Methods Implementing ScatteringByteChannel
public final long
read (java.nio.ByteBuffer[ ]
dsts )
throws java.io.IOException;
public abstract long
read (java.nio.ByteBuffer[ ]
dsts , int
offset ,
int
length ) throws java.io.IOException;
// Methods Implementing WritableByteChannel
public abstract int
write (java.nio.ByteBuffer
src )
throws java.io.IOException;
// Public Methods Overriding SelectableChannel
public final int
validOps ( ); constant
}
java.net.DatagramSocket.getChannel( ),
java.nio.channels.spi.SelectorProvider.openDatagramChannel(
)