【问题标题】:Checking a local TCP port is not open in Java检查本地 TCP 端口未在 Java 中打开
【发布时间】:2009-11-20 01:55:34
【问题描述】:

是否有一种简单的方法可以确保本地端口尚未打开。默认情况下,一些 TCP 套接字服务器(例如 Grizzly)似乎不执行此检查。缺少此检查时,服务器似乎启动并响应,但客户端代码只是连接到未关闭的旧服务器。这可能非常糟糕!

是否有一行简单的 Java 代码可以检查以确保该端口未被其他进程使用?

【问题讨论】:

    标签: java tcp grizzly


    【解决方案1】:

    我看到了两种明显的方法:

    1. 尝试连接到 localhost 上的该端口,如果您被接受,则该端口正在使用中
    2. 尝试在该端口中以侦听模式打开 ServerSocket。如果您收到“已绑定”异常,则表明该端口正在使用中

    希望对你有帮助。

    【讨论】:

    • 在这两者之间,最好尝试连接——打开一个端口更有可能弹出用户的防火墙,并警告“应用程序 XYZ 正在尝试侦听端口 1234...”
    • ServerSocket 解决方案非常巧妙。防火墙弹出窗口很好,因为程序无论如何都会在该端口上提供服务。感谢您的帮助。
    • 请注意:如果您尝试连接到某个端口但失败,可能是因为您被防火墙阻止连接到该端口。无法连接并不意味着它没有被使用。
    • @Mr.闪亮和新:是的。但他说的是本地端口,而不是远程端口。在这种情况下,如果该端口确实打开,使用“localhost”作为主机名,则无法连接到该端口的可能性很小。
    • @Mark Rushakoff:最好不要尝试连接,因为这会产生不可预知的结果。事实上,在尝试连接时,您永远无法保证得到响应。所以充其量你有一个迹象表明没有任何东西在运行,但唯一可以确定的方法是尝试绑定到端口并且你得到一个异常或者你成功。
    猜你喜欢
    • 2013-05-12
    • 2013-01-23
    • 2012-10-17
    • 2023-03-07
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多