第112回 ソケットチャンネルの入出力
引き続き「ソケットチャンネルの入出力」です。
以前、DatagramSocketクラスを使ってUDP通信を行うことについて書きましたが、チャンネルを使ってUDP通信を行うこともできます。
そのためにはDatagramChannelを使用します。
次のサンプルコードは、データを送信するプログラムです。
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.charset.Charset;
public class Main {
private static final String HOST = "localhost";
private static final int PORT = 9999;
public static void main(String[] args) {
DatagramChannel datagramChannel = null;
try {
Charset charset = Charset.forName("Shift-JIS");
ByteBuffer byteBuffer = charset.encode("send data");
datagramChannel = DatagramChannel.open();
InetSocketAddress inetSocketAddress
= new InetSocketAddress(HOST, PORT);
datagramChannel.send(byteBuffer, inetSocketAddress);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
datagramChannel.close();
} catch (Exception e) {
}
}
}
}
sendメソッドがデータを送信している部分です。
DatagramSocketでデータを送信する場合は、DatagramPacketにデータを格納して送信していましたが、DatagramChannelでデータを送信する場合は、データはバッファに格納して送信します。

