文章目录

概念

是指互联网协议地址(Internet Protocol Address);用来给一个网络中的计算机设备做唯一的网络编号。

  • IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d的形式,其中a.b.c.d都是0-255之间的十进制数,比如192.168.0.1;最多可以表示42亿个地址。
  • IPv6:采用128位地址长工,每16个字节一组,分成8组16进制数,比如ABCD:12F0:EC98:1234:67BA:009A:EFEF:ABAB,IPv6的出现,解决了IPv4网络地址资源紧张的问题。
  • 特殊的IP地址:127.0.0.1

Java API

InetAddress类
  • java.net.InetAddress类是Java对IP地址(包括IPv4与IPv6)的应用层表示。
= InetAddress.getByName("www.baidu.com");
// 返回主机别名
inetAddress.getHostName();
// 返回字符串类型的IP地址
inetAddress.getHostAddress();
// 返回byte数组的IP地址
inetAddress.getAddress();
// 返回主机名
inetAddress.getCanonicalHostName();
// 判断IPv4或Ipv6地址
InetAddress inetAddress = InetAddress.getByName("www.baidu.com");

byte[] address = inetAddress.getAddress();
if (address.length == 4) {
System.out.println("IPv4地址");
} else if (address.length == 6) {
System.out.println("IPv6地址");
} else {
System.out.println("未知");
}
NetWorkInterface类
  • NetWorkInterface类表示本地IP地址:可以是本地物理网卡地址或虚拟网卡地址。
  • NetWorkInterface类提供了一些方法可以枚举所有所有本机地址,并由他们创建InetAddress对象

案例:获取本机所有的IPv4地址

/**
* 获取本机所有网卡设备的IPv4地址
*
* @author zhuhuix
* @date 2020-06-29
*/
public class NetWorkInterfaceDemo {

public static void main(String[] args) throws SocketException {

// 列出所有网络接口
Enumeration<NetworkInterface> netWorkInterfaceEnumeration = NetworkInterface.getNetworkInterfaces();
while (netWorkInterfaceEnumeration.hasMoreElements()) {
NetworkInterface networkInterface = netWorkInterfaceEnumeration.nextElement();
// 列出网络接口所有的网络地址
Enumeration<InetAddress> inetAddressEnumeration = networkInterface.getInetAddresses();
while (inetAddressEnumeration.hasMoreElements()) {
InetAddress inetAddress = inetAddressEnumeration.nextElement();
// 列出为127.0.0.1的IPv4网络地址
if (inetAddress instanceof Inet4Address && !inetAddress.isLoopbackAddress()) {
System.out.println(networkInterface);
String hostAddress= inetAddress.getHostAddress();
System.out.println(hostAddress);
}
}
}

}
}

Java网络编程的基础知识:IP地址_网络地址