一、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. codeforces 719C. Efim and Strange Grade

    C. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...

  2. 马上给Meltdown和Spectre漏洞打补丁

    元旦之后的第一个工作日可谓是惊喜不断,4号就传来了 Google Project Zero 等团队和个人报告的 Meltdown 和 Spectre 内核漏洞的消息,首先简单介绍一下这两个内核漏洞. ...

  3. 转:Mybatis系列之集合映射

    转:Mybatis系列之集合映射 上篇文章我们讲了关联映射,实现了销售与登录用户之间的关联.本文我们接着来讲一讲集合映射,实现销售与客户的多对多关系. 实现销售与客户多对多关系 本文中仍延用<M ...

  4. jzoj2701 【GDKOI2012模拟02.01】矩阵

    传送门:https://jzoj.net/senior/#main/show/2701 [题目大意] 给出矩阵A,求矩阵B,使得

  5. phpcms v9 后台添加修改页面空白页问题解决方法

    phpcms v9 添加修改页面空白页的解决方法 找一个正常运行的phpcms 将caches\caches_model\caches_data 目录下的 content_form.class.php ...

  6. wikioi 1245最小的N个和

    2013-09-08 10:12 LRJ的算法竞赛入门经典训练指南里有类似的题,原题要难很多,p189页 读入A,B两组中的所有数后,建立N个有序表: A1+B1<A2+B1<A3+B1& ...

  7. kickstart构建Live CD 添加文件问题

    在构建自定义ISO的时候,有时候需要从母体机器拷贝文件到Live CD系统.比如拷贝/home/xiaoxiaoleo/hello 程序,在Kickstart配置文件里, post脚本添加--noch ...

  8. cobalt strike使用笔记

    启动: ./teamserver 192.168.74.1 admin #启动cs服务器.admin为密码. 监听器: windows/beacon_dns/reverse_dns_txtwindow ...

  9. (转载)常用的Python库

    http://forum.ubuntu.com.cn/viewtopic.php?f=63&t=249573&p=2640959 Tkinter ---- Python默认的图形界面接 ...

  10. vnc无法显示桌面

    转载   以下是我的正确配置,解决上述问题,附带说明:  修改后的~/.vnc/xstartup #!/bin/sh # Uncomment the following two lines for n ...