我有一个应用程序(Java),它提供了一个嵌入式Jetty。默认情况下,我尝试获取Jetty服务器的端口8080。如果端口正在使用中,我会随机尝试一个端口:
try {
socket = new ServerSocket(def);
} catch (IOException e) {
socket = new ServerSocket(0);
}问题是我有一个客户,他在8080上运行Tomcat。如果tomcat已关闭,则一切正常。如果Tomcat是作为服务运行的,并且我的应用程序想要获取一个端口,它将获取默认端口(8080),尽管tomcat正在侦听那里。如果浏览localhost:8080/test.html,我会从Tomcat得到一个http 404。
因此,只要在8080端口上没有真正的请求,tomcat似乎就处于休眠状态。
我想知道这是为什么,是如何工作的,以及如何修改我的java代码来解决这个问题。
亲切的问候
发布于 2011-01-13 01:12:58
将Tomcat或Jetty更改为使用另一个端口。每个端口一个监听程序。
发布于 2011-01-13 01:16:14
你已经解决了这个问题...
但是您可以使用"taskkill.exe“命令更好地处理它(如果您之前使用"tasklist.exe”找到了PID )。
发布于 2011-01-13 02:41:44
您的问题是两个应用程序正在竞争系统资源,在您的示例中,系统资源是TCP端口8080。为了释放端口,您必须使用系统API (widnows或linux或...)在这一点上,您将把Java的独立性抛在脑后。我看到它工作的唯一方式(虽然不是web服务器)是告诉系统找到当前占用端口的进程,并将其挂起几秒钟。其他进程将在有请求时自动认领该端口。尽管如此,它仍然是一个混乱的解决方案。
https://stackoverflow.com/questions/4671697
复制相似问题