一、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. AnnotationConfigApplicationContext.的用法的核心代码

    public static void main(String[] args) {ApplicationContext ctx = new AnnotationConfigApplicationCont ...

  2. com.mongodb.MongoException$CursorNotFound: cursor not found on server异常处理

    java链接MongoDB处理大量数据时经常碰到cursor not found 的异常,其实是超时所致 Exception in thread "main" com.mongod ...

  3. 使用vs2010编辑Unity脚本,配置方法

    在Unity界面上.选择Edit->Preferences->External Tools,External Script Editor一项即为编译器. 以Unity3D 4.3.4 f1 ...

  4. spring boot修改内置容器tomcat的服务端口

    方式一 在spring boot的web 工程中,可以使用内置的web container.有时需要修改服务端口,可以通过配置类和@Configuration注解来完成. // MyConfigura ...

  5. Codeforces Round #299 Div2 解题报告

    这场比赛并没有打现场,昨天晚上做了ABCD四道题,今天做掉了E题 以前还没有过切完一场比赛的所有题呢~爽~ A. Tavas and Nafas   Today Tavas got his test ...

  6. bzoj 1251 裸splay

    裸的splay,只需要注意 max[-1]:=-maxlongint 就行了,否则在update的时候子节点的 max值会在max[-1]里选 /*************************** ...

  7. 手机端图片插件可缩放 旋转 全屏查看photoswipe

    官方介绍PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone.iPad.黑莓6+,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产品 ...

  8. Storm中log4j日志打印不出来的解决办法

    使用storm命令启动JAVA进程的时候,发现log4j日志打印不出来,咋办呢? 解决办法如下(亲测): 删除strom/lib目录下的log4j-over-slf4j-1.6.6.jar strom ...

  9. 【C++】类的特殊成员变量+初始化列表

    参考资料: 1.黄邦勇帅 2.http://blog.163.com/sunshine_linting/blog/static/448933232011810101848652/ 3.http://w ...

  10. Selenium2+python自动化67-用例失败自动截图【转载】

    前言: 装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数 上一篇讲到用装饰器解决异常后自动截图,不过并没有与unittest结合,这篇把截图的装饰器改良了下,可以实现用例执行失败自动截图 ...