ServerSocket,Tomcat作为服务和端口

时间:2011-01-12 17:10:39

标签: java windows tomcat service

我有一个应用程序(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代码来解决这个问题。

亲切的问候

3 个答案:

答案 0 :(得分:1)

更改Tomcat或Jetty以使用其他端口。每个端口一个监听器。

答案 1 :(得分:1)

你已经解决了这个问题......

但您可以使用“taskkill.exe”命令更好地处理它(如果您之前找到了带有“tasklist.exe”的PID)。

答案 2 :(得分:0)

您的问题是两个应用程序竞争系统资源,在您的情况下是TCP端口8080.为了释放端口,您将不得不使用系统API(widnows或linux或...)指出你将离开Java独立。我看到这个工作的唯一方法(虽然不是惠特网络服务器)是通过告诉系统找到当前持有端口的进程并暂停它几秒钟。与其他其他进程相比,一旦有请求,它将自动声明该端口。 然而,这是一个混乱的解决方案。