无法分配请求的地址: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接口)。