`

Java Socket-02 Java Socket地址

    博客分类:
  • JAVA
 
阅读更多

 

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--Socket-网络编程.doc

    java版本调用HP-Socket服务端代码

    java版本调用HP-Socket服务端代码,包含jna包及5.0.2版本的HP-Socket的dll文件,采用的是非常新的HP-Socket版本,demo是整套java工程,导入eclipse修改HpSocket.java文件中的服务器的IP和端口就可以测试,里面还包含...

    Java Socket-03 Java TCP Socket

    Java Socket是Java编程语言中用于网络通信的核心API,它提供了基于TCP/IP协议的网络通信功能。在本主题中,我们将深入探讨Java中的TCP Socket编程,包括基本概念、工作原理以及如何通过`TestClient.java`和`...

    java-socketcan

    Java SocketCAN是一个用于在Linux环境下通过Java编程语言与CAN(Controller Area Network)总线通信的库。这个库允许开发者在Java应用程序中实现低级别的CAN数据帧收发,从而无需深入理解底层操作系统或C/C++编程。...

    Java Socket学习---单线程阻塞

    客户端也需要创建`Socket`对象,通过`connect()`方法连接到服务器指定的IP地址和端口号。之后,客户端同样会通过Socket的输入输出流来发送数据和接收服务器的回应。在这个单线程阻塞模型中,如果客户端发送了一个...

    Java-network-socket-programming.zip_java programming_java socket

    4. InetSocketAddress类:用于封装IP地址和端口号,作为Socket和ServerSocket的构造参数。 三、Socket编程步骤 1. 服务器端: - 创建ServerSocket对象,指定端口号。 - 调用ServerSocket的accept()方法,阻塞等待...

    java-socket连接nodejs-socket

    创建Socket时,你需要指定服务器的IP地址和端口号。以下是一个简单的Java Socket客户端示例: ```java import java.io.*; import java.net.*; public class JavaSocketClient { public static void main(String[]...

    socket-java-demo-good.rar_Follow_ Follow_easy socket

    "socket-java-demo-good.rar_Follow_ Follow_easy socket"这个标题暗示我们这里有一个关于Java Socket编程的示例项目,它易于理解和实现。描述中的“easy to follow”进一步强调了这个demo的易用性,适合初学者或者...

    Java Socket学习---多线程阻塞

    在Java中,我们使用`Socket`类的构造函数指定服务器的IP地址和端口号来建立连接。然后,客户端也会创建自己的输入输出流,用于与服务器进行数据交换。客户端发送数据后,会通过`InputStream`读取服务器的响应,这也...

    基于java的开发源码-Java Socket通信实现.zip

    基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java Socket通信实现.zip 基于java的开发源码-Java ...

    java编程-socket-套接字-网络编程.docx

    ### Java编程中的Socket与网络编程详解 #### 一、Socket编程概述 Socket编程是Java网络编程的核心技术之一,主要用于实现不同计算机之间的通信。通过Socket,应用程序可以在网络上发送和接收数据,实现分布式系统...

    Java网络编程(socket---网上广播).rar_Java 网络_Socket网络编程_java socket _ja

    在描述中的"socket---网上广播"可能指的是使用多播Socket进行网络通信。 在实现网上广播时,服务器不仅需要监听普通TCP连接,还需要加入一个多播组,通过`MulticastSocket`发送数据到多播组。而客户端则需要创建`...

    JAVA-Socket-Programming.rar_Socket Programmi_java programming

    本资料“JAVA-Socket-Programming.rar”包含了一套完整的课件和实例,非常适合Java编程初学者学习。Socket编程允许应用程序通过Internet协议(如TCP/IP)进行通信,创建客户端和服务器端的连接,实现数据的双向传输...

    java socket client-server

    在压缩包文件`socket-demo`中,可能包含了完整的客户端和服务端示例代码,供学习者参考和实践。这些代码通常会有详细的注释,解释每一步的目的和工作原理。通过运行这些示例,你可以更好地理解Java Socket通信的工作...

    Java TCP-IP Socket编程-卡尔弗特.pdf

    Java TCP/IP Socket编程是网络通信领域中的核心技术,尤其在Java编程中,Socket是实现客户端与服务器之间通信的基础。本资料“Java TCP-IP Socket编程-卡尔弗特.pdf”旨在深入探讨如何利用Java语言进行TCP/IP套接字...

    mirrors-hp-socket-master.zip_java udp_python udp_socket_socket 高

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...

    Socket-JAVA-test.rar_java mtk_mtk java

    在"Socket-JAVA-test.rar"这个压缩包中,我们可以期待找到一个使用StreamSocket的示例,因为TCP通常更适合需要稳定、有序数据传输的J2ME应用。该测试程序可能包含以下关键知识点: 1. **Socket类的创建**:在Java中...

    JavaTCP-Socket.zip_JAVA socket编程_java socket _socket 聊天

    - 创建`Socket`实例,指定服务器的IP地址和端口号。例如:`Socket socket = new Socket("localhost", 6666);` - 同样,通过`getInputStream()`和`getOutputStream()`获取输入输出流。 - 在客户端和服务器端,使用...

    Socket-TCP-Echo.rar_java tcp socket_tcp server java

    在本示例中,“Socket-TCP-Echo.rar”包含了一个简单的TCP服务器和客户端程序,用于演示如何使用Java进行TCP通信。下面将详细解释相关知识点。 1. **TCP(Transmission Control Protocol)**: TCP是一种面向连接的...

Global site tag (gtag.js) - Google Analytics