株式会社イーヴ

EeBlog(テクニカルブログ)

TOP > EeBlog > 第99回 ソケットの入出力

第99回 ソケットの入出力

引き続き「ソケットの入出力」について見ていきます。

前々回、前回はServerSocketクラス,Socketクラスを使用し、サーバとクライアントで接続を確立してデータのやり取りを行いました。
このようなコネクション型のTCP通信では信頼性の高い通信を実現することができます。
それに対し、コネクションレスのUDP通信は信頼性は保証されませんが、データの転送速度が速いことから、リアルタイム性の高いストリーミング配信などのアプリケーションに向いています。

今回からはJavaによるUDP通信について見ていきます。

次のサンプルコードは、データを送信するプログラムです。

 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetSocketAddress;


 public class Main {


     private static final String HOST = "localhost";
     private static final int PORT = 9999;
     private static final String DATA = "データグラム";


     public static void main(String[] args) {
         try {
             byte[] bytes = DATA.getBytes("Shift-JIS");
             DatagramSocket datagramSocket = new DatagramSocket();
             InetSocketAddress inetSocketAddress 
                               = new InetSocketAddress(HOST, PORT);
             DatagramPacket datagramPacket 
                     = new DatagramPacket(bytes, bytes.length, inetSocketAddress);
             datagramSocket.send(datagramPacket);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 }

DatagramPacketクラスはデータ転送の単位(データグラムパケット)を表します。
DatagramSocketクラスはデータグラムパケットを送信するためのソケットを表します。
DatagramPacketインスタンスに送信先のIPアドレス、ポート、送信するデータを設定し、sendメソッドに渡すだけで送信できます。
コネクションを確立するわけではないので、送信先がデータを受信できる状態でなくても例外は発生しません。