2014-09-03 79 views
1

我得到BindException異常,同時重複使用相同的Address.Following是我的代碼。java.net.BindException:重新使用同一個連接時已經使用的地址

在的openConnection方法

69. Selector selector = SelectorProvider.provider().openSelector(); 
70. SocketChannel socketChannel = SocketChannel.open(); 
71. socketChannel.bind(new InetSocketAddress(port));// Edited 
72. socketChannel.socket().setReuseAddress(true); 
73. socketChannel.configureBlocking(false); 
74. socketChannel.connect(remoteAddress); 

例外:

java.net.BindException: Address already in use 
at sun.nio.ch.Net.bind0(Native Method) 
at sun.nio.ch.Net.bind(Net.java:414) 
at sun.nio.ch.Net.bind(Net.java:406) 
at sun.nio.ch.SocketChannelImpl.bind(SocketChannelImpl.java:580) 
at sun.nio.ch.SocketAdaptor.bind(SocketAdaptor.java:135) 
at com.example.client.request.Client.openConnection(Client.java:72) 

編輯

我解決了InvalidArgument異常,我已經編輯了上面的帖子,但現在重新連接在同一端口上,我得到了上面的異常。是我做錯了什麼?

+1

* bind()之後調用setReuseAddress()*是徒勞的。它必須在之前被調用。但是根本不需要調用bind()。 – EJP 2014-09-03 11:56:14

+0

@EJP謝謝,通過放置setReuseAddress()上面的bind()解決了這個問題,我使用綁定,因爲我想打開特定的端口並重用它。請將您的評論放在答案我想標記爲答案。 – rns 2014-09-03 12:15:07

回答

1

表示嘗試將套接字綁定到本地地址和端口時發生錯誤。通常,該端口正在使用中,或者請求的本地地址無法分配。

當您啓動通常在端口上偵聽的Web服務器或應用程序服務器時,例如Tomcat或Jetty在8080和8084上偵聽HTTP和HTTPS流量,它們將套接字綁定到本地地址和端口。如果你給他們的主機名例如localhost或devhost,那麼他們在Windows和Linux中使用/ etc/host將域名解析爲IP地址,如果此映射不正確,您將得到java.net.BindException:無法分配請求的地址:JVM_Bind。此主機到IP地址映射文件可以在C:\ Windows \ System32 \ Drivers \ etc \ hosts中找到,其中C:\ Windows是您安裝Windows操作系統的位置。如果你看一下這個文件,你會看到它包含IP地址和主機名,如下圖所示:

127.0.0.1本地主機

192.168.52.1本地主機

只是,糾正映射,或添加127.0。 0.1針對本地主機來解決這個問題

+0

我嘗試使用127.0.0.1或本地主機,但直到我的本地電腦連接到遠程時它才工作,但它給了我InvalidArgument異常。但感謝解釋我解決了它並編輯了這篇文章。 – rns 2014-09-03 12:14:33

相關問題