EeBlog(テクニカルブログ)

第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でデータを送信する場合は、データはバッファに格納して送信します。