第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メソッドに渡すだけで送信できます。
コネクションを確立するわけではないので、送信先がデータを受信できる状態でなくても例外は発生しません。

