所以我要做的是扫描本地网络以查找特定端口(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的多人游戏以及它如何扫描本地网络以获取开放游戏)。我现在的问题是,当我使用这种方法时,服务器端会中断,因为服务器只是在任何连接到它时立即发送数据。是否可以在没有连接的情况下检查端口是否打开?
答案 0 :(得分:1)
是否可以在未连接的情况下检查端口是否打开?
总之,没有。
没有支持此功能的标准机制。您可以这样做的唯一方法是设计,实施和部署自定义服务,以便在本地网络上的所有计算机上执行此操作。
正如EJP所指出的,一个编写良好的服务应该能够应对立即关闭TCP连接但不发送或接收数据的客户端。
但如果你的目的是在没有人注意探测器的情况下这样做的话......祝你好运!