0

状況に応じて、マルチキャストとユニキャストを使用してネットワーク経由でメッセージを送信するチャットであ​​る基本的なアプリをコーディングしています。これまでのところ、問題ありません。少し前にMulticastSocketパートを開始するまでは。この基本的なコードを実行すると、BindExceptionが発生します(問題のある部分に関係のない他のすべてのメソッドを削除しました):

private MulticastSocket socket_multicast;
private int port;
private InetAddress multicast_address;

public void setPort(int p) {
    port = p;
}

public void setMulticastAddress(String s) {
    try {
        multicast_address = InetAddress.getByName(s);
    } catch (IOException e) {
         e.printStackTrace();
    }
}

public void joinGroup() {

    System.out.println("Port : "+port+"\n @IP : "+multicast_address+"\n");
    try {
        socket_multicast = new MulticastSocket(port);
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        socket_multicast.joinGroup(multicast_address);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

このコードを実行すると、次のエラーが発生します(GUIに225.1.1.1と4567を配置しました)。

 Port : 4567
 @IP : /225.1.1.1
 java.net.BindException: Address already in use
 at java.net.PlainDatagramSocketImpl.bind0(Native Method)
 at       
 java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:85)
 at java.net.DatagramSocket.bind(DatagramSocket.java:373)
 at java.net.MulticastSocket.<init>(MulticastSocket.java:165)
 at java.net.MulticastSocket.<init>(MulticastSocket.java:130)
 at networkinterface.MulticastIF.joinGroup(MulticastIF.java:61)

IPとポートの組み合わせに関係なく、常に同じエラーが発生します。コンピューターを再起動しても、何も変更されませんでした。

:テストするには、パッケージビューでメインを使用してクラスを右クリックし、[実行]->[Javaアプリケーション]を選択します。Eclipseは、それを行うときにある種の仮想マシンを作成しますか、それともループバックアドレス127.0.0.1のみを使用しますか?InetAddress.getLocalHost();の結果を出力するとき。「akee-netbook/127.0.1.1」を持っています。私はユニキャストとマルチキャストを使用しているので、おそらくループバックアドレスのみを使用し、すでにバインドされているアドレスにバインドしようとします。もしそうなら、どうすればアプリを適切にテストできますか?はっきりしているのかわからない、はっきりしていないのなら教えて!

最後に、IPアドレスを出力するときにスラッシュが表示されるのはなぜですか。後で問題になりますか?それともtoString()メソッドから来るのはsmthですか?

4

3 に答える 3

0

ええと、私はどこが間違っていたか知っています。@ IP / portでUDPソケット(DatagramSocket)を使用していますが、MulticastSocketを使用して同じ@ IP/portで再度バインドしようとしています。マルチキャストはUDPを使用するため、ユニキャストトラフィックとマルチキャストトラフィックの両方に同じソケットを使用できると推測しましたが、そのようには機能しないようです。とにかく、あなたの答えに感謝し、2文字で解決されたn00bの問題に時間を割いて申し訳ありません:

    socket_multicast = new MulticastSocket(port);

交換された

    socket_multicast = new MulticastSocket(port+1);

-_-」

于 2011-05-04T10:40:41.887 に答える
0

これを Linux システムで実行していますか? もしそうなら、マルチキャストをカーネルにコンパイルしたり、モジュールをロードしたりしましたか?

于 2011-05-03T21:40:40.403 に答える
0

toString() については、InetAddress.toString()の javadoc を参照してください。

于 2011-05-03T21:41:40.197 に答える