gpt4 book ai didi

java - 在 Java 中检测端口可用性失败

转载 作者:行者123 更新时间:2023-12-04 05:04:20 24 4
gpt4 key购买 nike

我尝试使用以下方法检查端口 80 是否可用:

Sockets: Discover port availability using Java

我有一个 Java 应用程序,它检查端口 80 是否可用,如果可用,它运行一个小型 Web 服务器监听端口 80。它可以很好地检测另一个 Java 应用程序是否监听端口 80,例如如果我运行我的应用程序两次,第二个实例会正确地告诉我正在使用端口 80。

问题是我在端口 80 上运行和监听 WAMP,并且如果我在启动 WAMP 后运行我的 Java 应用程序,它不会告诉我端口 80 很忙。它似乎只告诉我另一个 Java 应用程序是否使用端口 80。

这超出了我的理解......非常感谢任何帮助!

代码片段:

int port = 80;
if(!Connection.isPortAvailable(port)) {
logger.info("Port " + port + " is already in use");
}
// in Connection class
public static boolean isPortAvailable(int port) {
ServerSocket ss = null;
DatagramSocket ds = null;
try {
ss = new ServerSocket(port);
ss.setReuseAddress(true);
ds = new DatagramSocket(port);
ds.setReuseAddress(true);
return true;
} catch (IOException e) {
} finally {
if (ds != null) {
ds.close();
}

if (ss != null) {
try {
ss.close();
} catch (IOException e) {
/* should not be thrown */
}
}
}

return false;
}

最佳答案

对所有此类问题的正确答案是尝试使用它并捕获异常。不是尝试查看它是否可用然后尝试使用它仍然必须处理异常,这有几个明显的问题:

  • 在“查看”和“尝试”之间有一个时间窗口,在此期间情况可能会发生变化(双向)。
  • 无论如何,您仍然必须在“使用”部分捕获失败。
  • 它基本上只是试图预测 future 。这应该是计算机科学,而不是算命。

  • 这适用于“it”的大多数值,包括网络端口、文件、任何资源。

    关于java - 在 Java 中检测端口可用性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15718835/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com