状況に応じて、マルチキャストとユニキャストを使用してネットワーク経由でメッセージを送信するチャットである基本的なアプリをコーディングしています。これまでのところ、問題ありません。少し前に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ですか?