IP地址和InetAddress类

    |     2015年5月25日   |   Java网络编程   |     0 条评论   |    1878

Java 的优势之一是程序能访问网络资源。语言提供了一系列类来完成这件事,底层通信软件都在 java.net 包中。通信双方必须遵守协议,目前最广泛使用的是 TCP/IP。

一、TCP/IP 协议

TCP(Transport Control Protocol)是传输控制协议,IP(Internet Protocol)是网际协议,TCP/IP 代表这两个协议组成的协议族。它分成四层:

层次 职责
网络接口层 接收和发送物理帧
网络层 相邻节点之间的通信
传输层 起点到终点的通信
应用层 文件传输、电子邮件等应用程序

TCP 把网络信息当作字节流。机器 A 把长报文分片打包发送,包头指明目的地和在接收序列中的位置;每个包按 IP 地址在节点间转发。接收端 B 按正确顺序重新组装。

协议族里还包括更具体的应用:Telnet 远程登录、FTP 文件传输、SMTP 邮件传输、NFS 网络文件服务,以及基于 TCP/IP 的 HTTP。HTTP 是 WWW 浏览器和服务器之间的应用层协议,无状态、面向对象。一次 HTTP 会话通常包括连接、请求、应答、关闭四步。

Java 可编写底层网络应用(传文件、建邮件控制器、处理网络数据等),支持 ftp、telnet、www 等 Internet 协议。

二、IP 地址

IP 地址标明因特网上一台计算机的位置,用 32 位二进制表示(IPv4)。地址分 A、B、C、D、E 五类,常用 A、B、C:

类 范围 结构
A 1.0.0.0–126.255.255.255 0 + 7 位网络号,后 24 位主机号
B 128.0.0.0–191.255.255.255 10 + 14 位网络号,后 16 位主机号
C 192.0.0.0–223.255.255.255 110 + 21 位网络号,后 8 位主机号
D 224.0.0.0–239.255.255.255 1110,28 位多播组编号
E 240.0.0.0–254.255.255.255 1111,保留试验使用

通常用四段十进制表示,例如 116.255.226.187,或用文字域名如 www.xinhua.net。域名服务器(DNS)负责把文字名称映射成网络地址。

三、InetAddress 类

java.net.InetAddress 的对象表示 IP 地址和域名,常用方法:

  • getByName(String s):按主机名得到对象,打印形态类似 www.sina.com.cn/202.108.37.40
  • getHostName():获取域名
  • getHostAddress():获取 IP 地址
  • getLocalHost():本机域名和 IP

【例 13-1】获取 www.xinhua.net 的域名和 IP。原文把关键字首字母大写、把 getByName 写成了 getByname,这里按可编译写法更正:

import java.net.*;
class Example10_1 {
    public static void main(String args[]) {
        try {
            InetAddress addr = InetAddress.getByName("www.xinhua.net");
            String domainName = addr.getHostName();
            String IPName = addr.getHostAddress();
            System.out.println(domainName);
            System.out.println(IPName);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

运行结果为(以当时解析为准):

www.xinhua.net
116.255.226.187

一句话总结:TCP/IP 负责分包转发;InetAddress.getByName 把域名解析成 IP,再用 getHostName / getHostAddress 读出来。

转载请注明来源:IP地址和InetAddress类
本文链接地址:https://ai.zhousir.top/?p=685
回复 取消