停止监听一个端口。

4

我有一个应用程序,在特定端口上接受SSL连接。当我从Websphere管理控制台停止应用程序,然后再次启动它时,会出现一个异常,指示该端口仍在使用中。我需要完全关闭并重新启动Websphere才能使应用程序再次正常工作。

在Java中停止监听端口的正确方法是什么?

4个回答

2

我不确定在Java中如何做到这一点,但关闭套接字(.close()对于ServerSocket?)将关闭端口。尽管如此,许多操作系统在您关闭端口后大约30秒内不会让您重用相同的端口,以防止新连接读取旧消息。


2

1

谢谢,但我的应用程序在循环中接受传入连接。我如何知道Websphere是否正在关闭我的应用程序? - AbdullahC
如果您正在打开一个端口,WebSphere会如何关闭它?应用服务器将关闭您的应用程序,并且未由WAS容器管理的资源将不会被关闭,因为应用服务器对它们一无所知。关闭端口应该是应用程序的责任。此外,正如Bob Turbo所提到的,关闭端口后可能在短时间内无法使用(这是由操作系统执行的)。 - Manglu
1
@Hippo:理想情况下,打开端口的应用程序应该负责优雅地关闭该端口。在您的情况下,您需要在循环中跟踪(使用数组/列表等)所有正在打开的端口。 - KMån
你的意思是我应该在contextDestroyed()中关闭打开的端口,就像ZZ Coder所描述的那样吗? - AbdullahC
1
@Hippo:重要的是关闭套接字,这可能是执行此操作的地方之一。 - KMån

0
ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true);
ss.bind(port);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接