java.net.BindException:重新使用相同连接时已在使用的地址

时间:2014-09-03 11:24:17

标签: java socket.io nio

我在重用相同的地址时遇到 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异常并且我已经编辑了上面的帖子但现在重新连接到同一个端口时我得到了上面的异常。有些事情我做错了吗?

2 个答案:

答案 0 :(得分:2)

如果要重用地址,则必须在绑定套接字之前调用setReuseAddress(true)

答案 1 :(得分: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 localhost

192.168.52.1 localhost

只是,更正映射,或者针对localhost添加127.0.0.1以解决此问题