我正在編寫一個基本應用程序,即使用多播和單播通過網絡發送消息的聊天,具體取決於具體情況。到目前爲止,沒有問題,直到前一陣子我開始MulticastSocket部分。我有一個的BindException,當我運行這個基本代碼(我刪除不與我的問題涉及到的部分我所有的其他方法):java中的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的combinason和端口我把,總是得到同樣的錯誤。我甚至重新啓動了我的電腦,它沒有改變。
注意事項:爲了測試,我在包視圖中使用右鍵單擊我的類,然後單擊「運行 - > Java應用程序」。當我這樣做時,Eclipse是否創建了某種虛擬機,還是僅使用了回送地址127.0.0.1,或者其他什麼?當我打印InetAddress.getLocalHost()的結果;我有「akee-netbook/127.0.1.1」。由於我使用單播和多播,也許它只使用回送地址,並嘗試綁定已經綁定的地址。如果是這樣,我該如何正確測試我的應用程序?我不知道我是否清楚,如果不清楚,告訴我!
最後一件事,當我打印我的IP地址時爲什麼會出現斜線?它會在稍後成爲問題嗎?或者它是否來自toString()方法?
我在linux系統(Ubuntu 11.04)和模塊:我不知道我應該這樣做,當輸入modprobe時,我沒有發現任何與ip多播有關的任何東西 – Akee 2011-05-03 21:47:31
我不認爲它是一個模塊 - 閱讀它似乎需要在內核中編譯所以我認爲你需要在界面級別打開它:http://manpages.ubuntu.com/manpages/maverick/man8/ifconfig.8.html – Liv 2011-05-03 22:15:35
好,所以這些命令可以使我的卡使用多播,與ifconfig eth0多播。但是我記得前一段時間我在校園裏時,我可以看到一些帶有wireshark的OSPF PDU,也許是錯誤的紀念品?我這樣做,並回報告訴你,如果這工作。無論如何,此外,爲什麼我的本地地址127.0.0.1而不是192.0.1.3,因爲它應該在我的局域網上? O_O – Akee 2011-05-04 07:21:46