Java
语言是在网络环境下诞生的,所以Java
语言虽然不能说是对于网络编程的支持最好的语言,但是必须说是一种对于网络编程提供良好支持的语言,使用Java
语言进行网络编程将是一件比较轻松的工作。
和网络编程有关的基本API
位于java.net
包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。该包中既包含基础的网络编程类,也包含封装后的专门处理WEB
相关的处理类。在本章中,将只介绍基础的网络编程类。
首先来介绍一个基础的网络类——InetAddress
类。该类的功能是代表一个IP
地址,是ip
地址的java
表示方式。并且将IP
地址和域名相关的操作方法包含在该类的内部。
InetAddress
类—代表一个IP
地址
创建InetAddress类实例的方法
InetAddress
没有public
构造器,必须通过一系列的静态方法获取实例。如下表所示。
方法 | 描述 |
---|---|
static InetAddress[] getAllByName(String host) |
在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。 |
static InetAddress getByAddress(byte[] addr) |
在给定原始 IP 地址的情况下,返回 InetAddress 对象。 |
static InetAddress getByAddress(String host, byte[] addr) |
根据提供的主机名和 IP 地址创建 InetAddress。 |
static InetAddress getByName(String host) |
在给定主机名的情况下确定主机的 IP 地址。 |
static InetAddress getLocalHost() |
返回本地主机。 |
在这些静态方法中,最为常用的应该是getByName(String host)
方法,只需要传入目标主机的名字,
实例
通过域名获取InetAddress
对象:1
2// 使用域名创建InetAddress对象
InetAddress inetAddr = InetAddress.getByName("github.com");
通过IP地址获取InetAddress对象:1
2// 使用点分十进制IP地址创建InetAddress对象
InetAddress inetAddr = InetAddress.getByName("52.74.223.119");
获取本机的InetAddress对象:1
InetAddress address = InetAddress.getLocalHost();
重写Object类的方法:
方法 | 描述 |
---|---|
boolean equals(Object obj) |
将此对象与指定对象比较。 |
int hashCode() |
返回此 IP 地址的哈希码。 |
String toString() |
将此 IP 地址转换为 String。 |
实例:1
2
3
4
5
6
7
8
9//根据域名生成实例
InetAddress inetAddr=InetAddress.getByName("github.com");
System.out.println(inetAddr.toString());
//根据IP地址生产实例
inetAddr=InetAddress.getByName("13.250.177.223");
System.out.println(inetAddr.toString());
//获取本机
inetAddr=InetAddress.getLocalHost();
System.out.println(inetAddr.toString());
运行结果:1
2
3github.com/13.250.177.223
/13.250.177.223
DESKTOP-9H231R6/192.168.233.233
获取IP地址相关信息的方法
方法 | 描述 |
---|---|
String getCanonicalHostName() |
获取此 IP 地址的完全限定域名。 |
String getHostAddress() |
获取点分十进制表示的ip地址 |
byte[] getAddress() |
获取字节数组表示的ip地址 |
String getHostName() |
获取此 IP 地址的主机名。 |
实例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public static void main(String[] args)
{
try
{
// 使用域名创建对象
InetAddress inetAddr = InetAddress.getByName("github.com");
System.out.println("IP地址的完全限定域名:" + inetAddr.getCanonicalHostName());
System.out.println("主机IP地址为:" + inetAddr.getHostAddress());
System.out.println("主机名称为:" + inetAddr.getHostName());
// byte[] getAddress() 返回此 InetAddress 对象的原始 IP 地址。
byte[] ipbyte = inetAddr.getAddress();// 获取原始IP地址
System.out.println("字节数组表示的ip地址:" + Arrays.toString(ipbyte));
System.out.print("字节地址转为点分十进制表示:");
for (int i = 0; i < ipbyte.length; i++)
{
if (i != 0)
System.out.print(".");
System.out.print(Byte.toUnsignedInt(ipbyte[i]));
}
System.out.println();
} catch (Exception e)
{
}
}
运行结果:1
2
3
4
5IP地址的完全限定域名:ec2-52-74-223-119.ap-southeast-1.compute.amazonaws.com
主机IP地址为:52.74.223.119
主机名称为:github.com
字节数组表示的ip地址:[52, 74, -33, 119]
字节地址转为点分十进制表示:52.74.223.119
从运行结果中可以看到getHostAddress()
方法获取的是字符串表示的IP地址(点分十进制),而getAddress()
获取的是字节数组表示的IP地址,这两者只是表示方式不同而已,两者之间可以相互转化。
判断方法:
方法 | 描述 |
---|---|
boolean isAnyLocalAddress() |
检查 InetAddress 是否是通配符地址的实用例行程序。 |
boolean isLinkLocalAddress() |
检查 InetAddress 是否是链接本地地址的实用例行程序。 |
boolean isLoopbackAddress() |
检查 InetAddress 是否是回送地址的实用例行程序。 |
boolean isMCGlobal() |
检查多播地址是否具有全局域的实用例行程序。 |
boolean isMCLinkLocal() |
检查多播地址是否具有链接范围的实用例行程序。 |
boolean isMCNodeLocal() |
检查多播地址是否具有节点范围的实用例行程序。 |
boolean isMCOrgLocal() |
检查多播地址是否具有组织范围的实用例行程序。 |
boolean isMCSiteLocal() |
检查多播地址是否具有站点范围的实用例行程序。 |
boolean isMulticastAddress() |
检查 InetAddress 是否是 IP 多播地址的实用例行程序。 |
boolean isReachable(int timeout) |
测试是否可以达到该地址。 |
boolean isReachable(NetworkInterface netif,int ttl, int timeout) |
测试是否可以达到该地址。 |
boolean isSiteLocalAddress() |
检查 InetAddress 是否是站点本地地址的实用例行程序。 |
原文链接: 3Java网络编程技术