IP地址检查得到错误

时间:2011-11-11 09:27:23

标签: android

我在以下条件的帮助下检查IP是否可以访问

if ( InetAddress.getByName(server1IPAddress).isReachable(1000) == false) 
{         
  ...... 
  ......
}

它与普通IP地址192.168.1.158一起正常工作 但当我包含端口号和外部IP 61.17.172.4:85它显示错误 UnknownHostException

任何人都会帮助我吗

3 个答案:

答案 0 :(得分:0)

只是想一想,我对Inetaddress不太熟悉。尝试使用逗号,例如InetAddress(string ip,string pt)。看看这里:http://nmstl.sourceforge.net/doc/apiuc/classInetAddress.html#a2

希望这有帮助

答案 1 :(得分:0)

我认为它运作正常。以这种方式指定的端口对于http和URL等协议是正确的,但不适用于主机地址。我想你需要去掉端口部分来调用getByName。

如果您有一个完整的网址,例如http://host.com:85/foo/bar.html,您可以使用以下内容获取主机地址:

public static String extractAddressFromUrl(String url) {
        String urlToProcess = null;

        //find protocol
        int protocolEndIndex = url.indexOf("://");
        if(protocolEndIndex>0) {
            urlToProcess = url.substring(protocolEndIndex + 3);
        } else {
            urlToProcess = url;
        }

        // If we have port number in the address we strip everything
        // after the port number
        int pos = urlToProcess.indexOf(':');
        if (pos >= 0) {
            urlToProcess = urlToProcess.substring(0, pos);
        }

        // If we have resource location in the address then we strip
        // everything after the '/'
        pos = urlToProcess.indexOf('/');
        if (pos >= 0) {
            urlToProcess = urlToProcess.substring(0, pos);
        }

        // If we have ? in the address then we strip
        // everything after the '?'
        pos = urlToProcess.indexOf('?');
        if (pos >= 0) {
            urlToProcess = urlToProcess.substring(0, pos);
        }
        return urlToProcess;
    }

此外,如果您想了解主机是否可用,您可以考虑使用ConnectivityManager.requestRouteToHost()

答案 2 :(得分:0)

你能否使用mmeyer建议的方法将输入字符串拆分为IP和端口,然后使用新的InetAddress方法?一个未经测试的例子是......

String urlToProcess = null; /* your input string */

int pos = urlToProcess.indexOf(':'); /* find the : */
if (pos >= 0) {
   ipAddress = urlToProcess.substring(0,pos ); /* return ip without the port */
   portNo = urlToProcess.substring(pos + 1); /* return the port */
}

sockaddr = new InetSocketAddress(ipAddress, portNo);

if ( InetAddress.getByName(sockaddr).isReachable(1000) == false) {
...your code....
}

就像我说的那样,我不是专家,我没有检查过代码,所以请用一点点盐。它只是每个人的答案的组合。