3

所以我要做的是扫描本地网络中的特定端口(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;
        }
    }

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

4

1 回答 1

1

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

一句话,不。

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


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

但是,如果您的目标是在没有人注意到探针的情况下执行此操作……祝您好运!

于 2013-10-26T07:15:39.750 回答