如果没有连接到端口,是否可以检查IP端口是否打开?

时间:2013-10-26 07:13:23

标签: java ip port

所以我要做的是扫描本地网络以查找特定端口(4444),然后返回该端口是否打开。我现在正在做的是:

    private static boolean portIsOpen(String ip, int port, int timeout) {
        try {
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(ip, port), timeout);
            socket.close();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

我将使用此方法搜索本地网络上的服务器(Think Minecraft的多人游戏以及它如何扫描本地网络以获取开放游戏)。我现在的问题是,当我使用这种方法时,服务器端会中断,因为服务器只是在任何连接到它时立即发送数据。是否可以在没有连接的情况下检查端口是否打开?

1 个答案:

答案 0 :(得分:1)

  

是否可以在未连接的情况下检查端口是否打开?

总之,没有。

没有支持此功能的标准机制。您可以这样做的唯一方法是设计,实施和部署自定义服务,以便在本地网络上的所有计算机上执行此操作。


正如EJP所指出的,一个编写良好的服务应该能够应对立即关闭TCP连接但不发送或接收数据的客户端。

但如果你的目的是在没有人注意探测器的情况下这样做的话......祝你好运!