我正在编写一个基本应用程序,一个聊天,它根据情况使用多播和单播通过网络发送消息。到目前为止,没有问题,直到前一段时间我开始 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();
}
}
当我运行这段代码时,出现以下错误(我将 225.1.1.1 和 4567 放在 GUI 中):
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 和端口组合,总是会得到相同的错误。我什至重新启动了我的电脑,它没有做任何改变。
注意:要测试,我在我的类中右键单击包视图中的 main,然后“运行为 -> Java 应用程序”。当我这样做时,Eclipse 会制作某种虚拟机,还是只使用环回地址 127.0.0.1 或其他什么?当我打印 InetAddress.getLocalHost() 的结果时;我有“akee-netbook/127.0.1.1”。由于我使用单播和多播,也许它只使用环回地址,并尝试绑定已经绑定的地址。如果是这样,我该如何正确测试我的应用程序?我不知道我是否清楚,如果没有,请告诉我!
最后一件事,为什么我打印我的 IP 地址时会有斜线?以后会不会有问题?还是来自 toString() 方法?