检查服务器端口是不是从 Android 打开

Posted

技术标签:

【中文标题】检查服务器端口是不是从 Android 打开【英文标题】:Checking if server port is open from Android检查服务器端口是否从 Android 打开 【发布时间】:2011-12-27 15:56:27 【问题描述】:

我正在尝试从我的 android 设备连接到我的远程服务器。如何检查服务器上的特定端口是否打开?例如。如何检查我的服务器 11.11.11.11 上的 80 端口是否打开?

目前,如果主机可达,我正在使用InetAddress ping,但这并不能告诉我端口 80 是否打开。

当前代码

boolean isAvailable = false;
try 
    isAvailable = InetAddress.getByName("11.11.11.11").isReachable(2000);
    if (isAvailable == true) 
       //host is reachable
       doSomething();
    
 catch (Exception e) 


【问题讨论】:

我认为你的应用不应该关心这个。如果您发现由于连接问题而引发的异常,只需显示“与服务器的连接已终止”消息。 是的,问题是应用程序在尝试连接时间过长时挂起。在测试与服务器的连接时,我通过使用加载屏幕缓解了这个问题。虽然仍然不是理想的解决方案 【参考方案1】:

创建一个 Socket,它将检查具有特定 端口 的给定 ip 是否可以连接。

public static boolean isPortOpen(final String ip, final int port, final int timeout) 

    try 
        Socket socket = new Socket();
        socket.connect(new InetSocketAddress(ip, port), timeout);
        socket.close();
        return true;
     

    catch(ConnectException ce)
        ce.printStackTrace();
        return false;
    

    catch (Exception ex) 
        ex.printStackTrace();
        return false;
    
     

【讨论】:

我试图这样做......但每次执行代码时,我都会收到错误消息,“连接被拒绝”这是什么意思@Morpheus......?实际上,当 AP 和客户端之间已经连接了两个设备时,就会发生这种情况。【参考方案2】:

Runtime.getRuntime().exec() 并将命令传递给它以获取带有 pid 的各种端口条目。命令如下:

“cat /proc/net/tcp”、“cat /proc/net/tcp6”、“cat /proc/net/udp”、“cat /proc/net/udp6”。

这里有源代码的解释。我已经测试过了。 :

http://kickwe.com/tutorial/android-port-scanner-tutorial/

【讨论】:

以上是关于检查服务器端口是不是从 Android 打开的主要内容,如果未能解决你的问题,请参考以下文章

如何检查端口是不是在带有批处理文件且没有第三方软件的远程服务器上打开? [关闭]

Rancher - 从 CLI 检查是不是占用了牛港

从服务器检查 Android 设备是不是在线

linux下如何开放一个端口

如何从网络服务器检查套接字?

如何在 Linux 中检查打开的端口?