私はJavaソケットプログラミングの新人です。私は現在、複数のクライアントがお互いにチャットをすることを可能にする小さなピアツーピアUDPチャットルームアプリケーションを開発中です。Javaピアツーピアudpチャットルーム
私の質問は、クライアントが接続されたクライアントのIPとポートのうちの1つだけを提供する接続ボタンを押すと、他の接続されたクライアントをすべて見つける方法です。プログラムはローカルネットワーク上でのみ動作します。
私はJavaソケットプログラミングの新人です。私は現在、複数のクライアントがお互いにチャットをすることを可能にする小さなピアツーピアUDPチャットルームアプリケーションを開発中です。Javaピアツーピアudpチャットルーム
私の質問は、クライアントが接続されたクライアントのIPとポートのうちの1つだけを提供する接続ボタンを押すと、他の接続されたクライアントをすべて見つける方法です。プログラムはローカルネットワーク上でのみ動作します。
あなたは(おそらく使用している)はIPv4で
放送用のアドレスが255.255.255.255であるUDPのユニークな機能を使用することができます。そのアドレスに送信されたデータグラムは、そのポートのネットワーク上のすべてのUDPクライアントに送信されます。
チャットアプリケーションのためにできることは、各クライアントがUDPブロードキャストに自分自身を識別するパケット(おそらくユーザーのニックネームなど)を送信させることです。他のすべてのクライアントはそのパケットを見るので、パケットを解析してネットワーク上のすべてのチャットクライアントのリストを表示することができます。ここで
が放送するデータグラムを送信する例です:
DatagramSocket s = new DatagramSocket();
s.setBroadcast(true);
DatagramPacket dp = new DatagramPacket("insert data here".getBytes(), "insert data here".length(), new InetSocketAddress("255.255.255.255", 5000));
s.send(dp);
別のクライアントは、このようにそれを受け取ることができます。
DatagramSocket s = new DatagramSocket();
s.setBroadcast(true);
DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);
s.receive(dp);
受信のDatagramPacketがIPが含まれており、誰がクライアントのポートしますそれを放送していた。
単純に1つの可能性は、すべてのクライアントが知っている他のピアを保存していて、接続している新しいクライアントにリストを渡すことです。
私はリストを使って新しいクライアントに渡してみました。それはうまくいきませんでした。 – Omar