一、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

7.1(java学习笔记)InetAddress&InetScoketAddress的更多相关文章

  1. 20145330第十周《Java学习笔记》

    20145330第十周<Java学习笔记> 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就 ...

  2. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

  3. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  4. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  5. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  6. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  7. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  10. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

随机推荐

  1. es6+最佳入门实践(7)

    7.set和map数据结构 7.1.什么是set? Set就是集合,集合是由一组无序且唯一的项组成,在es6中新增了set这种数据结构,有点类似于数组,但是它的元素是唯一的,没有重复 let st = ...

  2. 转:Spring AOP详解

    转:Spring AOP详解 一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址: ...

  3. js没有重载

    javascript与其他语言(如java)不同,它没有传统意义上的重载(即为函数编写两个定义,只要这两个函数的参数类型或数量不同即可),在js中,后定义的函数会覆盖先前的函数.js中的参数在内部是用 ...

  4. shell脚本复制文件夹内容到另外的文件夹,如果存在则自动备份

    有时我们需要将一个文件夹覆盖到我们的工作目录,但需要自动备份已经存在的文件,一个一个去备份太麻烦了,全部备份又没有必要.shell脚本可以很好滴完成这个任务.原文链接http://back.zhizh ...

  5. 关于Solaris的一些小技巧

    关于Solaris的一些小技巧 http://blog.chinaunix.net/uid-9787800-id-2394301.html SunOS 操作命令及linux区别 http://blog ...

  6. App云测试平台免费功能汇总

    Wetest  http://wetest.qq.com 阿里云测 https://mqc.aliyun.com/ Testbird  https://www.testbird.com/ 百度 htt ...

  7. 【 Zabbix 】— 监控nginx

    一.环境说明 OS:centos6.7 x64 nginx:nginx/1.9.9 ZABBIX:2.4.8 zabbix监控nginx是根据nginx的stub_status模块,抓取status模 ...

  8. javascript中使用el表达式获取不到数据问题

    我们通常会在jsp里面使用el表达式,把需要的值传递给 javascript 方法,例如: <p onclick="doSomething(${param})">< ...

  9. 搜索引擎--范例:SAE创建新应用,SVN管理代码

    最初接触的平台是新浪SAE平台,虽然限制多得要命,速度也不怎么样,但无论怎么样,人家是“免费的”,免费的东西你还想怎么样?是不是? 1:注册登录新浪SAE,这个不用多说,相信你们的智商 2:创建一个新 ...

  10. 【C++】const、volatile不能修饰没有this指针的成员函数

    一般所有的成员函数都只有一个复本,当不同的对象调用成员函数时,为了区分是哪个成员在调用,会传入this指针. 当调用有const.volatile修饰的成员函数时,会相应的传入一个const.vola ...