无法分配请求的地址:JVM_Bind

时间:2012-01-22 22:05:40

标签: java sockets jvm bind

当我尝试设置套接字服务器时,我收到一条错误消息:

Exception in thread "main" java.net.BindException: Cannot assign requested address: JVM_Bind
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
    at java.net.ServerSocket.bind(ServerSocket.java:328)
    at java.net.ServerSocket.<init>(ServerSocket.java:194)
    at java.net.ServerSocket.<init>(ServerSocket.java:106)
    at socketyserver.SocketyServer.main(SocketyServer.java:12)
Java Result: 1

整个代码最简单,因为它可以:

public static void main(String[] args) throws UnknownHostException, IOException
{
    ServerSocket serverSocket;
    serverSocket = new ServerSocket(9999);
}

我100%确定我的端口已转发,Windows防火墙已关闭。什么都没有阻止端口9999.还有什么可能出错?

15 个答案:

答案 0 :(得分:30)

可能与您/etc/hosts中的错误配置有关。 就我而言,它是这样的: 192.168.1.11 localhost代替127.0.0.1 localhost

答案 1 :(得分:17)

正如其他人所指出的,它很可能与使用端口9999的另一个进程相关。在Windows上,运行命令:

netstat -a -n | grep "LIST"

它应该列出那些占据港口的东西。当然,您必须在任务管理器中手动终止这些程序。如果仍然无效,请替换以下行:

serverSocket = new ServerSocket(9999);

使用:

InetAddress locIP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(9999, 0, locIP);

当然,请将192.168.1.20替换为您的实际IP地址,或使用127.0.0.1

答案 2 :(得分:15)

对于那些为了解决类似问题而可能会看到这个答案的人,我收到了类似的消息,因为我的IP地址发生了变化。

java.net.BindException: Cannot assign requested address: bind
    at sun.nio.ch.Net.bind(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
    at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:182)
    at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:311)
    at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:260)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.server.Server.doStart(Server.java:273)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)

答案 3 :(得分:12)

错误说Cannot assign requested address。这意味着您需要为您的某个网络接口使用正确的地址,或0.0.0.0接受来自所有接口的连接。

关于端口的其他解决方案仅在有时失败的黑魔法之后工作(比如在一些计算机重启后工作但不能在其他计算机重启之后)因为端口完全不相关。

答案 4 :(得分:5)

java.net.BindExcpetion

的Java文档
  

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

原因:

错误是由于上述第二个条件造成的。当您启动服务器(Tomcat,Jetty等)时,它会侦听端口并将套接字绑定到地址和端口。在Windows和Linux中,主机名从/etc/hosts解析为IP地址。此主机到IP地址映射文件可在C:\Windows\System32\Drivers\etc\hosts找到。如果更改此映射并且无法将主机名解析为IP地址,则会收到错误消息。

解决方案:

编辑hosts文件并使用管理员权限更正主机名和IP的映射。

例如:

#127.0.0.1 localhost
192.168.52.1 localhost

了解详情:java.net.BindException : cannot assign requested address.

答案 5 :(得分:4)

对我而言,这是因为先前的jmeter.properties更改仍在进行中

httpclient.localaddress=12.34.56.78

答案 6 :(得分:4)

如果您正在使用服务器,那么公共网络IP&#34;和&#34;内部网络IP&#34;。 使用&#34;内部网络IP&#34;在您的文件/ etc / hosts和&#34;公共网络IP&#34;在你的代码中。 如果您使用&#34;公共网络IP&#34;在您的文件/ etc / hosts中,您将收到此错误。

答案 7 :(得分:0)

该端口由另一个进程占用。可能是你的程序没有终止的老版本。确保你的程序干净利落或杀死它。

答案 8 :(得分:0)

正如错误所述,它无法绑定 - 这通常意味着它正被另一个进程使用。从命令行运行:

  

netstat -a -n -o

在左栏中查询正在使用的端口9999的输出。

有关详细信息:http://www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm

答案 9 :(得分:0)

就我而言,从/ etc / hosts

中删除
  • 127.0.0.1 localhost
  • 192.168.100.20 localhost&lt;&lt;&lt;&lt; ----(删除或评论)

答案 10 :(得分:0)

将配置从一台服务器复制到另一台服务器时,我遇到了这个错误。

我在 $ {JETTY_BASE} /start.ini jetty.host 属性中使用了旧主机的主机名。设置正确的jetty.host属性值为我解决了这个问题。

希望这可以帮助将来必须同时处理多台服务器的人。

答案 11 :(得分:0)

如果你发生在CentOS上?

你应该尝试这个。

$ service network restart

重新启动服务器。

答案 12 :(得分:0)

我的笔记本电脑在网络中有一个内部 DNS 名称,它很好,直到出事然后坏了。

为了解决这个问题,我添加了一行按 DNS 名称将所有请求路由到我的 127.0.0.1,我的 /etc/hosts 如下所示:

127.0.0.1       localhost
127.0.0.1       host.docker.internal
127.0.0.1       my-url.box #added for the problem

可能与某人相关。

很容易调试,只要运行一个类直到它变成绿色:

public static void main(String[] args) throws Exception {
        new ServerSocket(0, 1, InetAddress.getLocalHost());
    }

答案 13 :(得分:0)

就我而言: 刚刚重新启动我的计算机,之后一切正常。

答案 14 :(得分:-3)

  

java.net.BindException:无法分配请求的地址

根据BindException文档,它基本上是:

  

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

请尝试以下命令:

sudo lsof -i:8983

仔细检查是否有任何应用程序使用相同的端口并将其终止。

如果情况并非如此,请确保您尝试绑定的IP地址正确无误(已正确分配给您的网络接口)。