我有一个应用程序接受特定端口上的SSL连接。当我从Websphere管理控制台停止应用程序并重新启动它时,出现一个异常,指出端口仍在使用中。我需要关闭并重新启动Websphere才能让应用程序再次运行。停止监听端口
停止在Java中监听端口的正确方法是什么?
我有一个应用程序接受特定端口上的SSL连接。当我从Websphere管理控制台停止应用程序并重新启动它时,出现一个异常,指出端口仍在使用中。我需要关闭并重新启动Websphere才能让应用程序再次运行。停止监听端口
停止在Java中监听端口的正确方法是什么?
创建一个上下文侦听器并将其注册到web.xml中。然后你可以关闭所有在contextDestroyed()
调用中打开的套接字。
详情请参见本,
我不确定它是如何在Java中完成的,但关闭套接字(ServerSocket上的.close()?)将关闭端口。尽管如此,许多操作系统在关闭它之后不会让您重复使用相同的端口约30秒,以防止旧连接被旧连接读取。
只需关闭插座手柄,就像yourSocket.close()
。 This example可能会有所帮助。
ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true);
ss.bind(port);
谢谢,但我的应用程序接受在一个循环中传入的连接。我怎么知道Websphere是否正在关闭我的应用程序? – AbdullahC 2010-06-28 06:45:26
如果您打开一个端口,WebSphere将如何进入并关闭它? 应用程序服务器关闭您的应用程序,并且由于应用程序服务器没有任何关于它们的线索,不会关闭由WAS容器管理的资源。 它应该是应用程序的关闭端口的责任。同样如Bob Turbo所述,这些端口在关闭后可能短时间内不可用(这由OS执行)。 – Manglu 2010-06-29 00:40:36
@Hippo:理想情况下,打开端口的应用程序负责端口的优雅关闭。在你的情况下,你需要跟踪(在一个数组/列表等)所有在你的循环中打开的端口。 – 2010-06-29 08:42:16