Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用ServerSocket.socketBind分配请求的地址_Java_Sockets_Jvm_Bind - Fatal编程技术网

Java 无法使用ServerSocket.socketBind分配请求的地址

Java 无法使用ServerSocket.socketBind分配请求的地址,java,sockets,jvm,bind,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.

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

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

我100%确定我的端口已转发,Windows防火墙已关闭。没有任何东西阻挡9999端口。还有什么可能出错?

端口被另一个进程占用。可能是程序的未终止的旧运行。请确保您的程序已完全退出或终止。

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

netstat -a -n | grep "LIST"
它应该列出任何占据港口的东西。当然,您必须在TaskManager中手动终止这些程序。如果仍然不起作用,请更换该线路:

serverSocket = new ServerSocket(9999);
与:


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

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

netstat-a-n-o

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


有关详细信息:

这可能与
/etc/hosts
中的配置错误有关。 我的情况是这样的:
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)

对我来说,这是因为之前的jmeter.properties更改仍在进行中

httpclient.localaddress=12.34.56.78

错误显示
无法分配请求的地址
。这意味着您需要使用一个网络接口的正确地址或
0.0.0.0
来接受来自所有接口的连接

其他关于端口的解决方案只有在黑魔法失败后才起作用(比如在某些计算机重启后工作,但在其他计算机重启后不起作用),因为端口完全不相关

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

根据
BindException
文档,基本上:

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

因此,请尝试以下命令:

sudo lsof -i:8983
再次检查是否有任何应用程序正在使用同一端口并将其终止


如果不是这样,请确保您尝试绑定的IP地址正确(已正确分配给网络接口)。

Java.net.BindException的Java文档

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

原因:

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

解决方案:

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

例如:


阅读更多信息:

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

  • 127.0.0.1本地主机

  • 192.168.100.20 localhost我在将配置从一台服务器复制到另一台服务器时遇到了这个错误

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


    希望这对将来需要同时在多台服务器上工作的人有所帮助。

    如果你是在CentOS上工作的话

    你应该试试这个

    $service网络重启


    重新启动服务器。

    如果您正在使用服务器,则有“公共网络IP”和“内部网络IP”。 使用文件/etc/hosts中的“内部网络IP”和代码中的“公共网络IP”。
    如果在文件/etc/hosts中使用“公共网络IP”,则会出现此错误。

    BindException的javadoc声明:表示在尝试将套接字绑定到本地地址和端口时发生错误。通常,端口正在使用中,或者无法分配请求的本地地址。您确定您的程序没有运行两次吗?第一个实例使用该端口,第二个实例抛出异常,因为第一个实例已经在使用该端口。声音就像服务器的另一个副本已经在运行一样(仔细检查任务管理器)或者您刚刚杀死了另一个版本的服务器,并且套接字“延迟”了一段时间。请参阅“无法分配请求的地址”意味着(在您的情况下)可能“localhost”未映射到有效的ip。感谢anwsers,但在发布之前,我已确保没有任何内容阻止端口9999。重新启动电脑后,出现相同的错误。是。我运行的所有操作都会自动获得提升的权限。是的,命令行是以管理员权限运行的。我正在使用“java-jarsocketserver.jar”命令。有人能解释一下,为什么第二种形式不同/更好?这是不正确的。如果端口被另一个进程占用,则错误为“java.net.BindException:地址已在使用”。错误“java.net.BindException:无法分配请求的地址”问题是因为您试图在无效的IP地址上打开套接字。这是不可能的!我刚刚重新启动了我的电脑,它没有帮助。这是不正确的。如果端口被另一个进程占用,则错误为“java.net.BindException:地址已在使用”。错误“java.net.BindException:无法分配请求的地址”问题i
    httpclient.localaddress=12.34.56.78
    
    sudo lsof -i:8983
    
    #127.0.0.1 localhost
    192.168.52.1 localhost