无法分配请求的地址:JVM_Bind

当我试图build立一个套接字服务器,我有一个错误信息:

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防火墙closures。 什么都不会阻塞端口9999。还有什么可以出错?

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

 netstat -a -n | grep "LIST" 

它应该列出那些占用港口的东西。 当然,你将不得不去手动杀死任务pipe理器中的这些程序。 如果这仍然不起作用,请更换该行:

 serverSocket = new ServerSocket(9999); 

附:

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

当然用你的实际IP地址replace192.168.1.20 ,或者使用127.0.0.1

这可能与/etc/hosts错误configuration有关。 在我的情况,这是这样的: 192.168.1.11 localhost而不是127.0.0.1 localhost

只是为了解决类似问题的其他人可能会看到这个答案,我收到了类似的消息,因为我的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) 

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

关于端口的其他解决scheme只有在有时会失败的黑魔法(比如在某些计算机重新启动之后工作,而不是其他的)之后才起作用,因为这个端口是完全不相关的。

对我来说,这是因为以前的jmeter.properties变化仍在发挥

 httpclient.localaddress=12.34.56.78 

java.net.BindExcpetion Java文档,

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

原因:

错误是由于上面提到的第二个条件。 当你启动一个服务器(Tomcat,Jetty等)时,它监听一个端口并将一个套接字绑定到一个地址和端口。 在Windows和Linux中,主机名被parsing为来自/etc/hosts IP地址。这个主机到IP地址的映射文件可以在C:\Windows\System32\Drivers\etc\hosts 。 如果这个映射改变了,主机名不能parsing到IP地址,你会得到错误信息。

解:

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

例如:

 #127.0.0.1 localhost 192.168.52.1 localhost 

阅读更多: java.net.BindException:不能分配请求的地址。

如果您正在使用服务器,则有“公共networkingIP”和“内部networkingIP”。 在你的文件/ etc / hosts中使用“internal network IP”,在你的代码中使用“public network IP”。 如果你在你的文件/ etc / hosts中使用“public network IP”,那么你会得到这个错误。

该端口是由另一个进程采取的。 可能是您的程序没有终止的旧版本。 确保你的程序干净地退出或杀死它。

由于错误状态,它不能绑定 – 这通常意味着它正在被另一个进程使用。 从命令行运行:

netstat -a -n -o

询问左侧列使用的端口9999的输出。

欲了解更多信息: http : //www.zdnetasia.com/see-what-process-is-using-a-tcp-port-62047950.htm

在我的情况下,从/ etc / hosts中删除

  • 127.0.0.1 localhost
  • 192.168.100.20 localhost <<<< —-(删除或评论)

从一台服务器复制configuration到另一台服务器时遇到此错误。

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

希望这有助于将来需要一次在多个服务器上工作的人。

如果你发生在CentOS上?

你应该尝试这个。

$服务networking重新启动

要么

重启你的服务器。

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

根据BindException文档,它基本上:

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

所以试试下面的命令:

 sudo lsof -i:8983 

仔细检查是否有任何应用程序使用相同的端口并杀死它。

如果情况并非如此,请确保您尝试绑定的IP地址是正确的(将其正确分配给您的networking接口)。