GVKun编程网logo

Android 使用 InetAddress 判断指定主机是否能够链接(android判断dialog是否显示)

20

对于Android使用InetAddress判断指定主机是否能够链接感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解android判断dialog是否显示,并且为您提供关于(OK)Andro

对于Android 使用 InetAddress 判断指定主机是否能够链接感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解android判断dialog是否显示,并且为您提供关于(OK) Android 内核 中,判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段、(OK) Lineage-14.1(Android 7) - enable eth0 to get ipv6 address、.htacess 重定向 iphone、ipad、android 手机、android 平板电脑每个都指向不同的链接、7.1(java学习笔记)InetAddress&InetScoketAddress的宝贵知识。

本文目录一览:

Android 使用 InetAddress 判断指定主机是否能够链接(android判断dialog是否显示)

Android 使用 InetAddress 判断指定主机是否能够链接(android判断dialog是否显示)

Android 使用 InetAddress 判断指定主机是否能够链接

方法一(失败)

要判断一个IP或网站是否能够连接上
自己在子线程中使用如下代码:(注意:在主线程使用网络请求一般不被允许,因此使用InetAddress 会导致报错)

  //根据主机名称获得主机名称对象
    InetAddress host = InetAddress.getByName("www.baidu.com");
  //检查该主机在规定的时间内能否连上
  boolean isReachable = host.isReachable(5000);
  /**
  *注意这里一直链接失败,直接使用java写一个测试类能够链接远程主机,但是在Android中不能链接,
  *未寻找到原因。。。。。。
    */
   String  desc = "";
   if(isReachable){//可以链接
       desc = String.format("%s\n 主机名为%s\n 主机地址为%s \n当前时间为%s",
              desc,host.getHostName(),host.getHostAddress(),DateUtil.getNowTime());
   }else {
       desc = "无链接,当前时间为:"+ DateUtil.getNowDateTime()+"";
   }

方法二(成功)

在子线程中引用如下方法

//这里的path 可以设置为 “www.baidu.com”  端口设置为 80
    public static boolean isOnline(String path,int port) {
        try {
            int timeoutMs = 1500;
            Socket sock = new Socket();
            SocketAddress sockaddr = new InetSocketAddress(path, port);

            sock.connect(sockaddr, timeoutMs);
            sock.close();

            return true;
        } catch (IOException e) { return false; }
    }

结果

是否链接上:true

如果有谁能够知道第一个怎么回事,希望不吝赐教

(OK) Android 内核 中,判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段

(OK) Android 内核 中,判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段

//struct sockaddr_in netaddr1, netaddr2;
  //inet_aton("255.255.255.0", &netaddr1.sin_addr);
  //inet_aton("112.26.0.0", &netaddr2.sin_addr);

		//== 判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段
		//== if (locaddr == 112.26.0.0/24) || ( locaddr/24 == remaddr/24 )
	//	if (((srcaddr.sin_addr.s_addr & netaddr1.sin_addr.s_addr) == netaddr2.sin_addr.s_addr)
	//		|| ((srcaddr.sin_addr.s_addr & netaddr1.sin_addr.s_addr)
	//		 == (dstaddr.sin_addr.s_addr & netaddr1.sin_addr.s_addr)))
		//== netaddr1.sin_addr.s_addr, 即, inet_aton(), 可以使用 inet_addr() 代替
	//	if (((srcaddr.sin_addr.s_addr & inet_addr("255.255.255.0")) == inet_addr("112.26.0.0"))
	//		|| ((srcaddr.sin_addr.s_addr & inet_addr("255.255.255.0"))
	//		 == (dstaddr.sin_addr.s_addr & inet_addr("255.255.255.0"))))
		//== Android 内核 中 没有 inet_aton(), inet_addr(), 直接 使用 IP 地址 的 十六进制表示
		//== "255.255.255.0" = 0x00ffffff, "112.26.0.0" = 0x00001a70
		if (((srcaddr.sin_addr.s_addr & 0x00ffffff) == 0x00001a70)
			|| ((srcaddr.sin_addr.s_addr & 0x00ffffff)
			 == (dstaddr.sin_addr.s_addr & 0x00ffffff)))
			printf("yes\n");
		else
			printf("no\n");


(OK) Lineage-14.1(Android 7) - enable eth0 to get ipv6 address

(OK) Lineage-14.1(Android 7) - enable eth0 to get ipv6 address


if  "ip -6 addr add"  -->  "Permission denied"

then

echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6





.htacess 重定向 iphone、ipad、android 手机、android 平板电脑每个都指向不同的链接

.htacess 重定向 iphone、ipad、android 手机、android 平板电脑每个都指向不同的链接

我相信这个配置正是你所需要的......

if(isset($_SERVER["HTTP_USER_AGENT"])){
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    //code from http://detectmobilebrowsers.com/
    if(preg_match(
            '/(android|bb\d+|meego).+mobile|avantgo|bada\/
            |blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)
            |iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i
            |palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo
            |up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$userAgent
        )
        ||preg_match(
            '/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac
            |ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)
            |aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)
            |bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell
            |chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob
            |do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8
            |ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)
            |gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)
            |hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k
            |inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)
            |lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)
            |mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)
            |ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))
            |phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks
            |rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)
            |sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)
            |tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc
            |vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($userAgent,4)
        )
    ) {
        $isMobile = true;
    }
}

if ($isMobile && $_GET["redirect"] !== "off") {
    header("Location: mobile/index.php");
} else {

        header("Location: index.php");
}

7.1(java学习笔记)InetAddress&InetScoketAddress

7.1(java学习笔记)InetAddress&InetScoketAddress

一、InetAddress

   这个类主要表示IP地址.InetAddress封装了IP地址和域名。域名可以看做IP地址的一个别称,起这个别称的目的是为了便于记忆。

   例如www.baidu.com 就是119.75.217.109的别称,在浏览器地址栏输入119.75.217.109同样可以访问百度首页。明显这个别称更好记忆。

   InetAddress封装了IP地址和域名,总之里面的Address就是IP地址,Name就是这个地址的别称。

  

  1.1构造方法,改类的构造方法无法直接调用,需通过返回值为InetAddress的方法来获取对象。

    static InetAddress getByName(String host)//根据主机名(可以看做本地电脑的域名)返回InetAddress对象。

    host可为IP地址、域名的字符串表示。

    static InetAddress getByAddress(byte[] addr)//初始化参数为ip地址的字节数组表示,

    例如 new byte[]{(byte)192,(byte)168,(byte)0,(byte)81}

    static InetAddress getByAddress(String host,Byte[] addr)//返回host,addr设置的对应对象

    static InetAddress getLocalHost()//返回代表本机IP、域名的InetAddress对象。

  

  2.2主要方法

    String getHostName()//获取该对象的主机名

    String getHostAddress()//获取该对象的IP地址

 

  2.3 例子

    

import java.net.InetAddress;
import java.net.UnknownHostException;

public class TestNet {
    public static void main(String[] args) throws UnknownHostException {
        //InetAddress 封装了IP和DNS(域名)
        InetAddress localhost = InetAddress.getLocalHost();//返回代表本地InetAddress对象
        System.out.println(localhost.getHostName());//获取该该对象的IP域名     Ni
        System.out.println(localhost.getHostAddress());//获取该对象的IP地址  192.168.17.1
        InetAddress a = InetAddress.getByName("localhost");//返回该域名所代表的InetAddres对象
        System.out.println(a.getHostName());//获取该对象代表的域名               localhost
        System.out.println(a.getHostAddress());//获取该对象代表的IP地址 127.0.0.1
        InetAddress b = InetAddress.getByName("192.168.17.1");//返回该IP地址所代表的InetAddress对象
        System.out.println(b.getHostName());//返回该对象所代表域名    Ni
        System.out.println(b.getHostAddress());//返回该对象的IP地址 192.168.17.1
    }
}
Ni
192.168.17.1
localhost
127.0.0.1
Ni
192.168.17.1

 上述使用的都是本机地址,所以都可以将IP地址转换为域名。但某些其他外部网络地址会出现无法通过IP解析成域名的情况。

 

API中有这样一句话:

InetAddress类提供了将主机名解析为IP地址的方法,反之亦然。

将IP地址解析为域名时,如果存在安全管理器,则此方法首先使用主机名和-1作为参数调用其checkConnect方法,

以查看是否允许调用代码知道此IP地址的主机名,即是否连接到主机。如果不允许操作,它将返回IP地址的文本表示。

如果允许则返回域名。

 

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class TestNet {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress b = InetAddress.getByName("www.baidu.com");
        System.out.println(b.getHostName());
        System.out.println(b.getHostAddress());
    }
}
运行结果:
www.baidu.com
119.75.217.109

如果将static InetAddress getByName(String host)中的host设置为119.75.217.109,

会导致无法解析的情况发生,这时返回的域名就是这个IP地址本身的文本表示。

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class TestNet {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress b = InetAddress.getByName("119.75.217.109");
        System.out.println(b.getHostName());
        System.out.println(b.getHostAddress());
    }
}
运行结果;
119.75.217.109
119.75.217.109

 简而言之,如果能将IP地址解析成域名getHostName就返回域名,如果不能则返回IP地址本身。

 

二、InetSocketAddress

  InetSocketAddress在InetAddress的基础上封装了端口。

  

  2.1构造方法

  InetSocketAddress(InetAddress addr, int port)

  InetSocketAddress(String hostname, int port)

  //构造方法,hostname可为ip地址也可为主机名 port端口号

  传递参数为String 类型的ostname实际上内部是将String hostname转换为了InetAddress addr。

  

  其中的

  

  

  2.2主要方法

  int getPort()//获取端口号

  String getHostName()//获取主机名
  InetAddress getAddress()//返回一个InetAddress对象

 

  2.3例子

   

import java.net.InetSocketAddress;
import java.net.UnknownHostException;

public class TestNet {
    public static void main(String[] args) throws UnknownHostException {
        //最好不要分配1024以下的端口
        InetSocketAddress i = new InetSocketAddress("localhost",2048);//初始化,域名|主机名|地址
        //InetSocketAddress e = new InetSocketAddress("127.0.0.1",2049);
        System.out.println(i.getAddress().getHostName());
        System.out.println(i.getPort());//端口号
        InetAddress ia = i.getAddress();//返回一个InetAddress对象
        System.out.println(ia.getHostName());//后续就可以调用InetAddress中的方法对其操作 (主机名)
        System.out.println(ia.getHostAddress());//主机IP地址
    }
}
运行结果:
localhost
2048
localhost
127.0.0.1

关于Android 使用 InetAddress 判断指定主机是否能够链接android判断dialog是否显示的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于(OK) Android 内核 中,判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段、(OK) Lineage-14.1(Android 7) - enable eth0 to get ipv6 address、.htacess 重定向 iphone、ipad、android 手机、android 平板电脑每个都指向不同的链接、7.1(java学习笔记)InetAddress&InetScoketAddress的相关信息,请在本站寻找。

本文标签: