电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Android開發(fā)之InetAddress基礎(chǔ)入門簡介與源碼實(shí)例

瀏覽:134日期:2022-09-26 09:58:48

最近在學(xué)習(xí)soket編程中,看到有需要獲取到IP地址之類的需求,所以就去看了下如何獲取到主機(jī)名的IP地址。

其實(shí)就是需要用到一個類InetAddress。他是在java.net包下面。

InetAddress類的對象用于IP地址和域名,該類提供以下方法:

getByName(String s):獲得一個InetAddress 類的對象,該對象中含有主機(jī)的IP地址和域名,該對象用如下格式表示它包含的信息:www.sina.com.cn/202.108.37.40;

String getHostName():獲取InetAddress對象的域名;

String getHostAddress():獲取InetAddress對象的IP地址;

getLocalHost():獲得一個InetAddress對象,該對象含有本地機(jī)的域名和IP地址。

private void test() { try { InetAddress locAdd = InetAddress.getLocalHost(); //得到本地InetAddress對象 /* get www.baidu.com’s ip */ InetAddress remAdd = InetAddress.getByName('www.baidu.com'); //取得遠(yuǎn)程InetAddress對象 System.out.println('本機(jī)IP地址:' + locAdd.getHostAddress()); //得到本地IP地址 System.out.println('百度IP地址:' + remAdd.getHostAddress()); //得到百度IP地址 System.out.println('本機(jī)是否可達(dá):' + locAdd.isReachable(10000)); //10000是超時時間,10s /*打印:本機(jī)IP地址:192.168.1.109百度IP地址:115.239.210.26本機(jī)是否可達(dá):true */ } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

很多情況是,某一域名對應(yīng)的主機(jī)IP是可能有多個的,我們也可以一一的取回來。如下:

private void test2() { try { /* 百度可能有多個IP地址,解析回來,所以我們可以用一個數(shù)組裝起來 */ InetAddress[] addrs = InetAddress.getAllByName('www.baidu.com'); if (addrs != null && addrs.length > 0) {for (InetAddress addr : addrs) { System.out.println('--->' + addr.getHostAddress());} } } catch (UnknownHostException e) { e.printStackTrace(); } }

IP地址是IP使用的32位(IPv4)或者128位(IPv6)位無符號數(shù)字,它是傳輸層協(xié)議TCP,UDP的基礎(chǔ)。InetAddress是Java對IP地址的封裝,在java.net中有許多類都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。

InetAddress的實(shí)例對象包含以數(shù)字形式保存的IP地址,同時還可能包含主機(jī)名(如果使用主機(jī)名來獲取InetAddress的實(shí)例,或者使用數(shù)字來構(gòu)造,并且啟用了反向主機(jī)名解析的功能)。InetAddress類提供了將主機(jī)名解析為IP地址(或反之)的方法。

InetAddress對域名進(jìn)行解析是使用本地機(jī)器配置或者網(wǎng)絡(luò)命名服務(wù)(如域名系統(tǒng)(Domain Name System,DNS)和網(wǎng)絡(luò)信息服務(wù)(Network Information Service,NIS))來實(shí)現(xiàn)。

對于DNS來說,本地需要向DNS服務(wù)器發(fā)送查詢的請求,然后服務(wù)器根據(jù)一系列的操作,返回對應(yīng)的IP地址,為了提高效率,通常本地會緩存一些主機(jī)名與IP地址的映射,這樣訪問相同的地址,就不需要重復(fù)發(fā)送DNS請求了。

在java.net.InetAddress類同樣采用了這種策略。在默認(rèn)情況下,會緩存一段有限時間的映射,對于主機(jī)名解析不成功的結(jié)果,會緩存非常短的時間(10秒)來提高性能。

InetAddress類

該類代表ip地址,下面還有兩個子類,分別是Inet4Address和Inet6Address他們分別代表IPV4地址和IPV6地址

該類沒有構(gòu)造器,可以通過它的兩個靜態(tài)方法來獲取InetAddress的實(shí)例

>getByName(String host) 根據(jù)主機(jī)名獲取對應(yīng)的InetAddress對象

使用IP地址創(chuàng)建InetAddress對象(getByName,getAllByName,getByAddress方法都可以通過IP地址創(chuàng)建InetAddress對象)時,并不需要訪問DNS服務(wù)器。因此,通過DNS服務(wù)器查找域名的工作就由getHostName方法來完成。

如果IP地址不存在或DNS服務(wù)器不允許進(jìn)行IP地址和域名映射,就返回這個IP地址。

InetAddress address=InetAddress.getByName('141.146.8.66');

System.out.println(address.getHostName());//需要訪問DNS服務(wù)器才能得到域名

InetAddress address=InetAddress.getByName('1.2.3.4');//IP地址不存在

System.out.println(address.getHostName());//直接返回IP地址

用域名作為getByName和getAllByName方法的參數(shù)得到的InetAddress對象,該對象會得到這個域名,當(dāng)調(diào)用 getHostName時,就無需再訪問DNS服務(wù)器,而是直接將這個域名返回。

InetAddress address=InetAddress.getByName('www.jb51.net');

System.out.println(address.getHostName());//不需要訪問DNS服務(wù)器就能得到域名

try {InetAddress address = InetAddress.getByName('www.jb51.net');System.out.println(address);//www.jb51.net/119.75.218.70} catch (UnknownHostException e) {e.printStackTrace();}>getByAddress(byte[] addr)根據(jù)源ip地址來獲取InetAddress對象

InetAddress address;try {address= InetAddress.getByAddress(new byte[]{119,75,218,70});System.out.println(address);//輸出結(jié)果為:/119.75.218.70和字符串str相一致address = InetAddress.getByAddress('www.jb51.net', ipBuf);System.out.println(address);//輸出結(jié)果為www.jb51.net/119.75.218.70} catch (UnknownHostException e) {e.printStackTrace();}>InetAddress.getLocalHost()獲取本機(jī)的ip地址的主機(jī)名

try {InetAddress a = InetAddress.getLocalHost();System.out.println(a);//本機(jī)用戶名-PC/本機(jī)Ip} catch (UnknownHostException e) {e.printStackTrace();}

該類常用的其他幾個方法:

try {InetAddress address=InetAddress.getLocalHost();System.out.println(address.getHostAddress());//輸出ip字符串System.out.println(address.getHostName());//輸出用戶名System.out.println(address.getCanonicalHostName());//輸出本機(jī)的主機(jī)名.權(quán)限定域名(lan)} catch (UnknownHostException e) {e.printStackTrace();}getCanonicalHostName()方法

定義:public String getCanonicalHostName()

該方法和getHostName方法一樣,也是得到遠(yuǎn)程主機(jī)的域名。區(qū)別是,該方法得到的是主機(jī)名,getHostName得到的是主機(jī)別名。

1. 使用 getLocalHost() 創(chuàng)建InetAddress對象

此時getCanonicalHostName方法和getHostName方法得到的都是本機(jī)名

2. 使用域名 創(chuàng)建InetAddress對象

使用域名創(chuàng)建InetAddress對象后,getHostName方法不會訪問DNS服務(wù)器

但getCanonicalHostName方法就不一定了,這取決于DNS服務(wù)器如何解釋主機(jī)名和主機(jī)別名

3. 使用IP地址 創(chuàng)建InetAddress對象

此時getCanonicalHostName方法和getHostName方法完全相同,返回的都是主機(jī)名,而不是主機(jī)別名。

之所以要使用主機(jī)別名,是因為有時主機(jī)名可能比較復(fù)雜,如Oracle官方網(wǎng)站的主機(jī)名bigip-otn-portal.oracle.com,因此,為了使用戶訪問網(wǎng)站更方便,就增加了更簡單的主機(jī)別名,如 www.oracle.com

本文主要介紹了Android InetAddress基礎(chǔ)入門簡介與源碼實(shí)例,更多關(guān)于Android開發(fā)技巧請查看下面的相關(guān)鏈接

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 嘉兴泰东园林景观工程有限公司_花箱护栏 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 精密模具-双色注塑模具加工-深圳铭洋宇通 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 合金ICP光谱仪(磁性材料,工业废水)-百科| 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 江苏密集柜_电动_手动_移动_盛隆柜业江苏档案密集柜厂家 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 湖南自考_湖南自学考试 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 免联考国际MBA_在职MBA报考条件/科目/排名-MBA信息网 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 广东西屋电气有限公司-广东西屋电气有限公司 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 船用烟火信号弹-CCS防汛救生圈-船用救生抛绳器(海威救生设备) |