2010-06-28 152 views
4

我有一个应用程序接受特定端口上的SSL连接。当我从Websphere管理控制台停止应用程序并重新启动它时,出现一个异常,指出端口仍在使用中。我需要关闭并重新启动Websphere才能让应用程序再次运行。停止监听端口

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

回答

2

我不确定它是如何在Java中完成的,但关闭套接字(ServerSocket上的.close()?)将关闭端口。尽管如此,许多操作系统在关闭它之后不会让您重复使用相同的端口约30秒,以防止旧连接被旧连接读取。

1

只需关闭插座手柄,就像yourSocket.close()This example可能会有所帮助。

+0

谢谢,但我的应用程序接受在一个循环中传入的连接。我怎么知道Websphere是否正在关闭我的应用程序? – AbdullahC 2010-06-28 06:45:26

+0

如果您打开一个端口,WebSphere将如何进入并关闭它? 应用程序服务器关闭您的应用程序,并且由于应用程序服务器没有任何关于它们的线索,不会关闭由WAS容器管理的资源。 它应该是应用程序的关闭端口的责任。同样如Bob Turbo所述,这些端口在关闭后可能短时间内不可用(这由OS执行)。 – Manglu 2010-06-29 00:40:36

+1

@Hippo:理想情况下,打开端口的应用程序负责端口的优雅关闭。在你的情况下,你需要跟踪(在一个数组/列表等)所有在你的循环中打开的端口。 – 2010-06-29 08:42:16

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