MulticastSocket は、インターネット上の他のマルチキャスト ホストの「グループ」に参加する追加機能を備えた (UDP) DatagramSocket です。
import java.net.*; import java.io.*; import java.util.*; public class GroupChat { private static final String TERMINATE = "Exit"; static String name; static volatile boolean finished = false; public static void main(String[] args) { if (args.length != 2) System.out.println("Two arguments required: <multicast-host> <port-number>"); else { try { InetAddress group = InetAddress.getByName(args[0]); int port = Integer.parseInt(args[1]); Scanner sc = new Scanner(System.in); System.out.print("Enter your name: "); name = sc.nextLine(); MulticastSocket socket = new MulticastSocket(port); // Since we are deploying socket.setTimeToLive(0); // this on localhost only (For a subnet set it as 1) socket.joinGroup(group); Thread t = new Thread(new ReadThread(socket, group, port)); // Spawn a thread for reading messages t.start(); // sent to the current group System.out.println("Start typing messages...\n"); while (true) { String message; message = sc.nextLine(); if (message.equalsIgnoreCase(GroupChat.TERMINATE)) { finished = true; socket.leaveGroup(group); socket.close(); break; } message = name + ": " + message; byte[] buffer = message.getBytes(); DatagramPacket datagram = new DatagramPacket(buffer, buffer.length, group, port); socket.send(datagram); } } catch (SocketException se) { System.out.println("Error creating socket"); se.printStackTrace(); } catch (IOException ie) { System.out.println("Error reading/writing from/to socket"); ie.printStackTrace(); } } } } class ReadThread implements Runnable { private MulticastSocket socket; private InetAddress group; private int port; private static final int MAX_LEN = 1000; ReadThread(MulticastSocket socket, InetAddress group, int port) { this.socket = socket; this.group = group; this.port = port; } @Override public void run() { while (!GroupChat.finished) { byte[] buffer = new byte[ReadThread.MAX_LEN]; DatagramPacket datagram = new DatagramPacket(buffer, buffer.length, group, port); String message; try { socket.receive(datagram); message = new String(buffer, 0, datagram.getLength(), "UTF-8"); if (!message.startsWith(GroupChat.name)) System.out.println(message); } catch (IOException e) { System.out.println("Socket closed!"); } } } }
ファイルを GroupChat.java として保存し、javac を使用してコンパイルし、指定された 2 つのコマンド ライン引数を使用してプログラムを実行します。マルチキャスト ホストは、クラス D IP アドレスと標準の UDP ポート番号によって指定されます。クラス D IP アドレスの範囲は 224.0.0.0 ~ 239.255.255.255 (両端の値を含む) です。アドレス 224.0.0.0 は予約されているため、使用しないでください。
以下は、上記のプログラムからの出力例です:
追加ポイント:
Caesar 暗号などの原始的な手法や、RSA などの高度な手法を使用して、暗号化と復号化を実行できます。 Java の RMI (リモート メソッド呼び出し) を使用して同じタスクを実行してみることができます。
ここでは、Java が提供する抽象化を最大限に活用できます。ただし、主な目標が効率である場合は、ソケット プログラミングが最良の選択です。ランタイムサポートを必要としないため、RMI と比較して高速です。
以上がMulticastSocket を使用してグループ チャット アプリケーションを実装するための Java プログラミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。