Java UDP通信の実現

2771 ワード

▪ DatagramSocket:パケットを送信または受信するために使用されます。
      サーバがクライアントにデータを送信するには、サーバ端にDatagramSocketオブジェクトを生成し、クライアントにDatagram Socketオブジェクトを生成する必要がある。サーバ端のDatagramSocketはDatagram Packetをネットワークに送信し、クライアントのDatagram Socketに受信される。
      Datagram Socketにはよく使われる2つの構造関数があります。一つは、任意のパラメータを必要とせず、クライアントでよく使用される。もう一つはポートを指定する必要があります。サーバー側でよく使われています。以下の通りです
      DatagramSocket():データグラムソケットを構築し、ローカルホスト上の任意の利用可能なポートにバインドする。
      Datagram Socket(int port):データグラムソケットを作成し、ローカルホスト上の指定ポートにバインドする。
常用方法:
      Øsend(Datagram Packet p):これからソケットでデータパケットを送ります。
      Øreceive(Datagram Packet p):これからソケットでデータパケットを受信します。
      Øclose():このデータのソケットを閉じます。
▪ Datagram Packet:データ容器(封包)の役割
      このようなのはデータのパケットを表します。パケットの機能を実現するために使用されます。
常用方法:
      ØDatagram Packet(byte[]buf,int length):長さlengthのパケットを受信するためのデータパケットを構築する。
      ØDatagramPacket(byte[]buf,int length,InetAddres address,int port):パケットを構築し、指定されたホスト上の指定されたポート番号にlengthのパケットを送信する。
      Øget Addres():送信または受信したコンピュータのIPアドレスを取得し、このデータグラムはこのマシンに送信されます。またはこのマシンから受信されます。
      Øget Data():送信または受信したデータを取得する。
      Øset Data(byte[]buf):送信データを設定します。
UDP通信プログラミングの基本ステップ:
      1.クライアントのDatagramSocketを作成し、作成時にクライアントの傍受ポートを定義します。
      2.サーバ端のDatagramSocketを作成し、作成時にサーバ端の傍受ポートを定義します。
      3.サーバ端でDatagramPacketオブジェクトを定義し、送信するパケットをパッケージ化する。
      4.クライアントは、パケットを送信します。
      5.サーバ側でデータのパケットを受信します。
UDP:一方向通信のクライアント
mport java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
 
public class Client {
    public static void main(String[] args) throws Exception {
        byte[] b = "     ".getBytes();
        //                     ,            
        DatagramPacket dp = new DatagramPacket(b,b.length,new 
InetSocketAddress("localhost",8999));
        //        :         
        DatagramSocket ds = new DatagramSocket(9000);
        //      
        ds.send(dp);
        //    
        ds.close();
    }
}
UDP:一方向通信のサーバ端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
 
public class Server {
    public static void main(String[] args) throws Exception {
        //        :         
        DatagramSocket ds = new DatagramSocket(8999);
        byte[] b = new byte[1024];
        //      ,                
        DatagramPacket dp = new DatagramPacket(b, b.length);
        //           
        ds.receive(dp); //      
        //dp.getLength()             
        String string = new String(dp.getData(), 0, dp.getLength());
        System.out.println(string);
        //    
        ds.close();
    }
}
バイト配列ストリームByteArayInputStream、ByteArayOutputStreamとデータストリームData InputStream、Data OutputStreamとの連携により、ベースデータタイプを転送することができます。