在Eclipse中,我收到此错误:
run:
[java] Error creating the server socket.
[java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap
[java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind
[java] Java Result: -1
BUILD SUCCESSFUL
Total time: 10 seconds
我不知道为什么它现在出现了,但几个小时前它运行良好。我需要重启机器吗?我如何深究它?我感谢任何提示或建议。
是的,您有另一个进程绑定到同一个端口。
来自TCPView的Windows Sysinternals(仅限Windows)是我最喜欢的应用程序,每当我有一个JVM_BIND错误。它显示哪些进程正在侦听哪个端口。它还提供了一个方便的上下文菜单,可以终止进程或关闭阻碍进程的连接。
是的,正如Guido Simone所说,因为另一个进程正在侦听同一个端口。如果你在Ubuntu你可以简单地杀死那个进程给命令sudo kill $(sudo lsof -t -i:[port number])
例如:sudo kill $(sudo lsof -t -i:8080)
但是一旦它对我不起作用。我发出命令
$ lsof -i:[port]
它没有显示任何内容。
我使用命令docker ps -a
检查了我的docker容器,但是没有它们处于活动状态。所有容器都已停止(但我记得,我停止了几个分钟前用过相同端口的一个容器。)。为了确保docker不是原因,我停止整个docker进程使用命令sudo service docker stop
并再试一次。令人惊讶的是,eclipse当时没有显示错误。它完美地运行了我的程序。
希望我的经历能帮助一些人。
该端口已被其他进程使用,因为@Diego Pino说你可以在unix上使用lsof来定位进程并杀死相应的进程,如果你在windows上使用netstat -ano获取进程的所有pid并且每个人都获得的港口。搜索你想要的端口并杀死。
很容易重启你的机器,如果可能:)
当我首先启动Server程序然后启动Client程序时打开两个控制台时,我在Eclipse中遇到了类似的问题。我曾经在单一控制台中停止程序,认为它关闭了服务器,但它只关闭了客户端而不是服务器。我发现在我的任务管理器中运行Java进程。通过从各自的控制台关闭服务器和客户端程序来解决此问题(Eclipse显示最新活动程序的控制台)。因此,当我再次启动Server程序时,端口再次打开以进行捕获。
您的端口必须在其他进程中忙碌。因此,您可以在https://technet.microsoft.com/en-us/sysinternals/bb897437上下载TCPView并终止使用端口的进程。
如果您不知道您的端口,请双击未启动的服务器,然后单击“打开服务器属性页”并单击左列中的glassfish。你会在这里找到这些端口。
(1)检查端口是否正在使用,杀死该进程
$ lsof -i:[port]
(2)另一个原因是ipv6使用的端口,解决方案:
编辑/etc/sysctl.conf
将其添加到文件中
net.ipv6.conf.all.disable_ipv6 = 1
然后使它生效
$ sudo sysctl -p /etc/sysctl.conf
或者只是重启
这意味着其他一些进程已经在使用该端口。如果某个其他关键应用程序正在使用此端口并且您不想关闭该应用程序,则更好的方法是选择任何其他可以免费使用的端口。
配置您的应用程序以使用任何其他免费的端口,您将看到您的应用程序正常工作。
如果您是Linux用户,则需要关闭端口然后键入
fuser -k 8080/tcp
如果您知道进程正在运行的端口,则可以键入:lsof -i:<port>
。
例如,lsof -i:8080
,列出在端口8080上运行的进程(pid)。
然后用kill <pid>
杀死进程
在窗户中
netstat -ano
将列出所有协议,端口和进程监听。使用
taskkill -pid "proces to kill" /f
杀死侦听端口的进程。例如
taskkill -pid 431 /f
在Mac中:
杀死进程终端:kill <pid>
寻找pid:终端:lsof -i:<port>
来自Diego Pino的回答
在Ubuntu / Unix中,我们可以通过两个步骤解决此问题,如下所述。
netstat -plten |grep java
这将给出类似于的输出:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1001 76084 9488/java
这里8080
是java进程正在侦听的端口号,9488
是它的进程id(pid)。kill
命令终止此进程。
kill -9 9488
9488
是早期的进程ID。我们使用-9
来强行停止这个过程。您的端口现在应该是免费的,您可以重新启动服务器。
您有另一个进程在同一端口上运行。
你可以尝试杀死你的任务管理器中运行的一个java.exe服务 - ps确保你不要杀掉eclipse,因为它也被列为java.exe。如果没有别的办法,重启你的机器无论如何都会解决它。看起来您没有关闭先前测试的套接字。希望这可以帮助。
在Windows CMD行中,通过输入以下命令找出在绑定端口上保持连接的进程ID:
C:> netstat -a -o
- 显示所有连接
-o显示进程标识符
然后终止进程。