【问题标题】:Stop listening to a port停止监听端口
【发布时间】:2010-06-28 05:50:49
【问题描述】:

我有一个在特定端口上接受 SSL 连接的应用程序。当我从 Websphere 管理控制台停止应用程序然后重新启动它时,我收到一个异常,抱怨该端口仍在使用中。我需要完全关闭并重新启动 Websphere 才能让应用程序再次运行。

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

【问题讨论】:

    标签: java ssl websphere port


    【解决方案1】:

    创建一个上下文监听器并在 web.xml 中注册它。然后您可以在contextDestroyed() 调用中关闭所有打开的套接字。

    详情请看这里

    http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/cweb_sctxl.html

    【讨论】:

      【解决方案2】:

      我不确定它是如何在 Java 中完成的,但是关闭套接字(ServerSocket 上的 .close()?)将关闭端口。尽管如此,许多操作系统仍不允许您在关闭同一个端口大约 30 秒后重用它,以防止新连接读取旧消息。

      【讨论】:

        【解决方案3】:

        只需关闭套接字句柄,例如yourSocket.close()This example 可能会有所帮助。

        【讨论】:

        • 谢谢,但我的应用程序循环接受传入连接。我如何知道 Websphere 是否正在关闭我的应用程序?
        • 如果您要打开一个端口,WebSphere 将如何进入并为您关闭它?应用程序服务器关闭您的应用程序,并且不由 WAS 容器管理的资源不会关闭,因为应用程序服务器对它们没有任何线索。关闭端口应该是应用程序的责任。此外,正如 Bob Turbo 所提到的,端口在关闭后可能会在短时间内不可用(这是由操作系统执行的)。
        • @Hippo:理想情况下,打开端口的应用程序负责正常关闭该端口。在您的情况下,您需要跟踪(在数组/列表等中)在循环中打开的所有端口。
        • 你的意思是我应该像 ZZ Coder 描述的那样关闭 contextDestroyed() 中的开放端口吗?
        • @Hippo:重要的是关闭套接字,是的,这可能是一个地方。
        【解决方案4】:
        ServerSocket ss = new ServerSocket();
        ss.setReuseAddress(true);
        ss.bind(port);
        

        【讨论】:

          猜你喜欢
          • 2011-12-15
          • 2019-02-19
          • 1970-01-01
          • 1970-01-01
          • 2020-08-03
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          相关资源
          最近更新 更多