Adr*_*zyk 44 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
Run Code Online (Sandbox Code Playgroud)
整个代码最简单,因为它可以是:
public static void main(String[] args) throws UnknownHostException, IOException
{
ServerSocket serverSocket;
serverSocket = new ServerSocket(9999);
}
Run Code Online (Sandbox Code Playgroud)
我100%确定我的端口已转发,Windows防火墙已关闭.什么都没有阻止端口9999.还有什么可能出错?
小智 30
它可能与一个配置错误在你的/etc/hosts
.在我的情况下,它是这样的:
192.168.1.11 localhost
而不是127.0.0.1 localhost
Mar*_*nto 17
正如其他人所指出的那样,它很可能与另一个使用端口的进程有关9999
.在Windows上,运行命令:
netstat -a -n | grep "LIST"
Run Code Online (Sandbox Code Playgroud)
它应该列出那些占据港口的东西.当然,您必须在任务管理器中手动终止这些程序.如果仍然无效,请更换以下行:
serverSocket = new ServerSocket(9999);
Run Code Online (Sandbox Code Playgroud)
附:
InetAddress locIP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(9999, 0, locIP);
Run Code Online (Sandbox Code Playgroud)
当然要替换192.168.1.20
为您的实际IP地址,或使用127.0.0.1
.
cqu*_*zel 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)
Run Code Online (Sandbox Code Playgroud)
Ola*_*the 13
错误说Cannot assign requested address
.这意味着您需要为您的某个网络接口使用正确的地址或0.0.0.0
接受来自所有接口的连接.
关于端口的其他解决方案仅在有时失败的黑魔法之后工作(例如在一些计算机重启后工作但不在其他计算机重启之后)因为端口完全无关紧要.
Java文档java.net.BindExcpetion
,
表示尝试将套接字绑定到本地地址和端口时发生错误的信号.通常,端口正在使用中,或者 无法分配请求的本地地址.
原因:
该错误是由于上述第二个条件造成的.当您启动服务器(Tomcat,Jetty等)时,它会侦听端口并将套接字绑定到地址和端口.在Windows和Linux中,主机名被解析为IP地址从此/etc/hosts
主机到IP地址映射文件可以在C:\Windows\System32\Drivers\etc\hosts
.如果更改此映射并且无法将主机名解析为IP地址,则会收到错误消息.
解:
编辑hosts文件并使用管理员权限更正主机名和IP的映射.
例如:
#127.0.0.1 localhost
192.168.52.1 localhost
Run Code Online (Sandbox Code Playgroud)
阅读更多:java.net.BindException:无法分配请求的地址.
如果您使用的是服务器,则有“公共网络IP”和“内部网络IP”。在文件/ etc / hosts中使用“内部网络IP”,在代码中使用“公共网络IP”。如果您在文件/ etc / hosts中使用“公共网络IP”,则会出现此错误。
归档时间: |
|
查看次数: |
180988 次 |
最近记录: |