gpt4 book ai didi

java - 使用 Java 检测另一台设备上的端口是否打开

转载 作者:行者123 更新时间:2023-11-30 06:30:18 24 4
gpt4 key购买 nike

我正在尝试确定本地网络上的设备是否有开放端口。在阅读了很多意见后,我一直在运行以下代码:

try 
{
Socket s = new Socket();
s.setReuseAddress(true);
SocketAddress sa = new InetSocketAddress(ipAddress,
port);
s.connect(sa,
1000);

return s.isConnected();
}
catch (IOException e)
{
return false;
}

这段代码在大多数情况下都工作得很好。在极少数情况下,在对数千个设备运行后,此代码将报告端口 80 已关闭,但如果我尝试抓取网页(使用 Apache HTTPClient),它将起作用。

知道会发生什么吗?

一些可能的想法:

  • 1000 毫秒超时是否不够?
  • 是否不需要调用 isConnected() ?
  • setReuseAddress(true) 做了什么坏事吗?

最佳答案

Is the 1000ms timeout insufficient?

是的。

Is the call to isConnected() unnecessary?

是的。如果没有连接,就会抛出异常。

Is setReuseAddress(true) doing anything bad?

它可能根本没有做任何有用的事情。如果您不知道它的作用,那么它在那里做什么?

这段代码的主要问题是你泄漏了套接字。您需要在finally block 中关闭套接字。

当然,这种对 future 的预测本质上是错误的。如果您想知道端口是否正在监听,请尝试连接到它并使用相同的套接字参与您实际想要用它执行的任何事务。

关于java - 使用 Java 检测另一台设备上的端口是否打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299788/

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