【问题标题】:java.net.BindException: Address already in use while re using same connectionjava.net.BindException:地址已在使用中,而重新使用相同的连接
【发布时间】:2014-09-03 11:24:16
【问题描述】:

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

【问题讨论】:

  • 调用 setReuseAddress() after bind() 是徒劳的。必须先调用它。但是根本不需要调用bind()。
  • @EJP 谢谢,通过将 setReuseAddress() 放在 bind() 上方解决了问题,我使用了 bind 因为我想打开特定端口并重用它。请将您的评论放在我想标记的答案中如已回答。

标签: java socket.io nio


【解决方案1】:

如果你想重用一个地址,你必须在绑定套接字之前调用setReuseAddress(true)。

【讨论】:

    【解决方案2】:

    表示尝试将套接字绑定到本地地址和端口时发生错误。通常,端口正在使用中,或者无法分配请求的本地地址。

    当您启动 Web 服务器或应用程序服务器时,它们通常侦听端口,例如Tomcat 或 Jetty 在 8080 和 8084 上侦听 HTTP 和 HTTPS 流量,它们将套接字绑定到本地地址和端口。如果你给他们主机名,例如localhost 或 devhost,然后他们在 Windows 和 Linux 中都使用 /etc/host 将域名解析为 IP 地址,如果此映射不正确,您将得到 java.net.BindException: Cannot assign requested address: JVM_Bind。此主机到 IP 地址的映射文件位于 C:\Windows\System32\Drivers\etc\hosts,其中 C:\Windows 是您安装 Windows 操作系统的位置。如果您查看此文件,您将看到它包含 IP 地址和主机名,如下所示:

    127.0.0.1 本地主机

    192.168.52.1 本地主机

    只需更正映射,或针对 localhost 添加 127.0.0.1 即可解决此问题

    【讨论】:

    • 我确实尝试过使用 127.0.0.1 或 localhost 但这仅在我的本地电脑连接到远程时才有效,它给了我 InvalidArgument 异常。但感谢您的解释,我解决了它并编辑了帖子。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2015-10-30
    • 2014-08-11
    • 2013-09-08
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多