我在以下条件的帮助下检查IP是否可以访问
if ( InetAddress.getByName(server1IPAddress).isReachable(1000) == false)
{
......
......
}
它与普通IP地址192.168.1.158一起正常工作
但当我包含端口号和外部IP 61.17.172.4:85它显示错误 UnknownHostException
。
任何人都会帮助我吗
答案 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....
}
就像我说的那样,我不是专家,我没有检查过代码,所以请用一点点盐。它只是每个人的答案的组合。