package com.iteye.xuj.socket; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; public class InetAddressExample { public static void main(String[] args) { try { //静态方法getNetworkInterfaces()获取主机的网络接口列表 Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces(); if (interfaceList == null) { System.out.println("--No interfaces found--"); } else { //获取并打印出列表中每个接口的地址 while (interfaceList.hasMoreElements()) { NetworkInterface iface = interfaceList.nextElement(); //getName()方法为接口返回一个本地名称 System.out.println("Interface " + iface.getName() + ":"); //getInetAddresses()方法获取与接口相关联的地址 Enumeration<InetAddress> addrList = iface.getInetAddresses(); if (!addrList.hasMoreElements()) { System.out.println("\t(No addresses for this interface)"); } while (addrList.hasMoreElements()) { InetAddress address = addrList.nextElement(); System.out.print("\tAddress " + ((address instanceof Inet4Address ? "(v4)" : (address instanceof Inet6Address ? "(v6)" : "(?)")))); //getHostAddress()方法返回一个字符串来代表主机的数字型地址 System.out.println(": " + address.getHostAddress()); } } } } catch (SocketException se) { System.out.println("Error getting network interfaces:" + se.getMessage()); } //获取从命令行输入的每个参数所对应的主机名和地址 for (String host : args) { try { System.out.println(host + ":"); InetAddress[] addressList = InetAddress.getAllByName(host); for (InetAddress address : addressList) { System.out.println("\t" + address.getHostName() + "/" + address.getHostAddress()); } } catch (UnknownHostException e) { System.out.println("\tUnable to find address for " + host); } } } }
运行时参数:127.0.0.1 localhost
输出结果:
Interface lo: Address (v6): 0:0:0:0:0:0:0:1 Address (v4): 127.0.0.1 Interface net0: (No addresses for this interface) Interface net1: (No addresses for this interface) Interface net2: (No addresses for this interface) Interface ppp0: (No addresses for this interface) Interface eth0: (No addresses for this interface) Interface eth1: (No addresses for this interface) Interface eth2: (No addresses for this interface) Interface ppp1: (No addresses for this interface) Interface net3: (No addresses for this interface) Interface eth3: Address (v6): fe80:0:0:0:d801:2a2c:c88:70ef%11 Address (v4): 172.16.15.199 Interface net4: Address (v6): fe80:0:0:0:0:5efe:ac10:fc7%12 Interface net5: Address (v6): 2001:0:5ef5:79fd:1000:1d40:53ef:f038 Address (v6): fe80:0:0:0:1000:1d40:53ef:f038%13 Interface eth4: (No addresses for this interface) Interface eth5: (No addresses for this interface) Interface eth6: (No addresses for this interface) Interface eth7: (No addresses for this interface) Interface eth8: (No addresses for this interface) 127.0.0.1: 127.0.0.1/127.0.0.1 localhost: localhost/127.0.0.1 localhost/0:0:0:0:0:0:0:1
InetAddress: 创建和访问
// getAllByName() 方法用于返回一组与给定主机名相关联的所有地址的实例 static InetAddress[ ] getAllByName(String host) // getAddress() 方法返回一个适当长度的字节数组,代表地址的二进制的形式 static InetAddress getByName(String host) static InetAddress getLocalHost() byte[] getAddress()
InetAddress: 字符串表示
String toString() String getHostAddress() String getHostName() String getCanonicalHostName()
InetAddress: 检测属性
boolean isAnyLocalAddress() boolean isLinkLocalAddress() boolean isLoopbackAddress() boolean isMulticastAddress() boolean isMCGlobal() boolean isMCLinkLocal() boolean isMCNodeLocal() boolean isMCOrgLocal() boolean isMCSiteLocal() boolean isReachable(int timeout) boolean isReachable(NetworkInterface netif, int ttl, int timeout)
上述前三个方法分别检查地址实例是否属于 " 任意 " 本地地址, 本地链接地址, 以及回环地址
(匹配 127.*.*.* 或 ::1 的形式)。第 4 个方法检查其是否为一个多播地址,而 isMC...() 形式的方法检测多播地址的各种范围( scopes ) 。 最后两个方法检查是否真能与 InetAddress 地址确定的主机进行数据报文交换。
NetworkInterface: 创建, 获取信息
static Enumeration<NetworkInterface> getNetworkInterfaces() static NetworkInterface getByInetAddress(InetAddress addr) static NetworkInterface getByName(String name) Enumeration<InetAddress> getInetAddresses() String getName()
String getDisplayName()
上面第一个方法非常有用,使用它可以很容易获取到运行程序的主机的 IP 地址:通过 getNetworkInterfaces() 方法可以获取一个接口列表,再使用实例的 getInetAddresses() 方法就可以获取每个接口的所有地址。 注意: 这个列表包含了主机的所有接口, 包括不能够向网络中的其他主机发送或接收消息的虚拟回环接口。 同样, 列表中可能还包括外部不可达的本地链接地址。 由于这些列表都是无序的, 所以你不能简单地认为, 列表中第一个接口的第一个地址一定能够通过互联网访问,而是要通过前面提到的 InetAddress 类的属性检查方法,来判断一个地址不是回环地址,不是本地链接地址等等。
getName() 方法返回一个接口( interface ) 的名字(不是主机名)。
相关推荐
基于Java--Socket-网络编程.doc
java版本调用HP-Socket服务端代码,包含jna包及5.0.2版本的HP-Socket的dll文件,采用的是非常新的HP-Socket版本,demo是整套java工程,导入eclipse修改HpSocket.java文件中的服务器的IP和端口就可以测试,里面还包含...
Java Socket是Java编程语言中用于网络通信的核心API,它提供了基于TCP/IP协议的网络通信功能。在本主题中,我们将深入探讨Java中的TCP Socket编程,包括基本概念、工作原理以及如何通过`TestClient.java`和`...
客户端也需要创建`Socket`对象,通过`connect()`方法连接到服务器指定的IP地址和端口号。之后,客户端同样会通过Socket的输入输出流来发送数据和接收服务器的回应。在这个单线程阻塞模型中,如果客户端发送了一个...
4. InetSocketAddress类:用于封装IP地址和端口号,作为Socket和ServerSocket的构造参数。 三、Socket编程步骤 1. 服务器端: - 创建ServerSocket对象,指定端口号。 - 调用ServerSocket的accept()方法,阻塞等待...
创建Socket时,你需要指定服务器的IP地址和端口号。以下是一个简单的Java Socket客户端示例: ```java import java.io.*; import java.net.*; public class JavaSocketClient { public static void main(String[]...
Java SocketCAN是一个用于在Linux环境下通过Java编程语言与CAN(Controller Area Network)总线通信的库。这个库允许开发者在Java应用程序中实现低级别的CAN数据帧收发,从而无需深入理解底层操作系统或C/C++编程。...
"socket-java-demo-good.rar_Follow_ Follow_easy socket"这个标题暗示我们这里有一个关于Java Socket编程的示例项目,它易于理解和实现。描述中的“easy to follow”进一步强调了这个demo的易用性,适合初学者或者...
在Java中,我们使用`Socket`类的构造函数指定服务器的IP地址和端口号来建立连接。然后,客户端也会创建自己的输入输出流,用于与服务器进行数据交换。客户端发送数据后,会通过`InputStream`读取服务器的响应,这也...
基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java ...
### Java编程中的Socket与网络编程详解 #### 一、Socket编程概述 Socket编程是Java网络编程的核心技术之一,主要用于实现不同计算机之间的通信。通过Socket,应用程序可以在网络上发送和接收数据,实现分布式系统...
在描述中的"socket---网上广播"可能指的是使用多播Socket进行网络通信。 在实现网上广播时,服务器不仅需要监听普通TCP连接,还需要加入一个多播组,通过`MulticastSocket`发送数据到多播组。而客户端则需要创建`...
本资料“JAVA-Socket-Programming.rar”包含了一套完整的课件和实例,非常适合Java编程初学者学习。Socket编程允许应用程序通过Internet协议(如TCP/IP)进行通信,创建客户端和服务器端的连接,实现数据的双向传输...
在压缩包文件`socket-demo`中,可能包含了完整的客户端和服务端示例代码,供学习者参考和实践。这些代码通常会有详细的注释,解释每一步的目的和工作原理。通过运行这些示例,你可以更好地理解Java Socket通信的工作...
Java TCP/IP Socket编程是网络通信领域中的核心技术,尤其在Java编程中,Socket是实现客户端与服务器之间通信的基础。本资料“Java TCP-IP Socket编程-卡尔弗特.pdf”旨在深入探讨如何利用Java语言进行TCP/IP套接字...
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...
在"Socket-JAVA-test.rar"这个压缩包中,我们可以期待找到一个使用StreamSocket的示例,因为TCP通常更适合需要稳定、有序数据传输的J2ME应用。该测试程序可能包含以下关键知识点: 1. **Socket类的创建**:在Java中...
- 创建`Socket`实例,指定服务器的IP地址和端口号。例如:`Socket socket = new Socket("localhost", 6666);` - 同样,通过`getInputStream()`和`getOutputStream()`获取输入输出流。 - 在客户端和服务器端,使用...
在本示例中,“Socket-TCP-Echo.rar”包含了一个简单的TCP服务器和客户端程序,用于演示如何使用Java进行TCP通信。下面将详细解释相关知识点。 1. **TCP(Transmission Control Protocol)**: TCP是一种面向连接的...