UDP は TCPとは異なり、接続(Connection)を確立しなくても使用することができます。 UDPのデータ (データグラム, datagram と呼ばれる)は、個別のアドレス情報を保持しており、互いに独立している。 UDPソケットを作成すれば、どのようなアドレスのホストからでも、複数のホストとの間で次々にデータグラムを受信できます。 受信データグラムには送信元のIPアドレスやポート番号が含まれており、送られてきたデータの単位で取り出すことができ、TCPのようにデータがつながってしまうことはありません。つまり、UDPはメッセージの境界を保持します。
TCPとは異なり、UDPではデータグラムが届くかどうかは保証されず、また、データの届く順番も保証されません。
UDPでは、接続を確立せずに使えるので、TCPと比べると効率がよいといえます。 わずかな量のデータしかやりとりしない場合は、TCPの接続確立のためのメッセージのやりとりは無視できません。 また、信頼性の高いのストリーム通信を必要としない場面では、オーバーヘッドを非常に小さくできます。
また、コネクションを確立せずに通信を行えますので、ブロードキャスト・アドレス宛にデータを送ることもできます。
パケットの長さは、直前に処理したデータグラムの長さに応じて設定されるため、 元のバッファサイズよりも小さくなることがあります。 そのため、パケットを再利用する場合はバッファサイズをリセットする必要があることに注意が必要です。
UDPSendClient.javaの実行例 |
|
津田塾大学計算センターs205wsの教室のネットワークのネットワーク・アドレスは 172.17.0.0/23 なので、 ブロードキャスト・アドレスは 172.17.1.255 となります(2019年4月8日時点)。
UDPRecvServer.javaの実行例 |
|
[注意] UDPサーバが文字列を受け取るためには、UDPクライアントに文字列を入力する時点でUDPサーバが起動している必要があります。
UDPEchoClient.javaの実行例 |
|
UDPEchoServer.java の変更点 |
|
UDPEchoServer.javaの実行例 |
|