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