当我尝试设置套接字服务器时,我收到一条错误消息:
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.还有什么可能出错?
答案 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
,
表示尝试将套接字绑定到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
中删除答案 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地址正确无误(已正确分配给您的网络接口)。