杰瑞科技汇

Java如何获取Socket的IP地址?

Java 获取 Socket IP 地址

在 Java 中,获取 Socket 的 IP 地址可以通过多种方式实现,具体取决于你的使用场景(客户端 Socket 或服务器端 Socket),以下是几种常见的方法:

Java如何获取Socket的IP地址?-图1
(图片来源网络,侵删)

获取客户端 Socket 的 IP 地址(服务器端)

如果你是服务器端,想要连接到你的客户端 Socket 的 IP 地址:

import java.net.Socket;
import java.net.InetAddress;
// 假设 socket 是已经建立连接的 Socket 对象
Socket socket = ...; // 你的 Socket 对象
// 获取远程客户端的 IP 地址
InetAddress clientAddress = socket.getInetAddress();
String clientIP = clientAddress.getHostAddress();
// 获取远程客户端的主机名(如果可用)
String clientHostname = clientAddress.getHostName();
System.out.println("客户端IP地址: " + clientIP);
System.out.println("客户端主机名: " + clientHostname);

获取服务器端 Socket 的 IP 地址(客户端)

如果你是客户端,想要连接到的服务器 Socket 的 IP 地址:

import java.net.Socket;
import java.net.InetAddress;
// 假设 socket 是已经建立连接的 Socket 对象
Socket socket = ...; // 你的 Socket 对象
// 获取远程服务器的 IP 地址
InetAddress serverAddress = socket.getInetAddress();
String serverIP = serverAddress.getHostAddress();
// 获取远程服务器的主机名(如果可用)
String serverHostname = serverAddress.getHostName();
System.out.println("服务器IP地址: " + serverIP);
System.out.println("服务器主机名: " + serverHostname);

获取本地绑定地址

如果你想知道 Socket 绑定的本地 IP 地址:

import java.net.Socket;
Socket socket = ...; // 你的 Socket 对象
// 获取本地绑定的 IP 地址
String localIP = socket.getLocalAddress().getHostAddress();
// 获取本地绑定的端口
int localPort = socket.getLocalPort();
System.out.println("本地IP地址: " + localIP);
System.out.println("本地端口: " + localPort);

使用 ServerSocket 获取连接信息(服务器端)

如果你使用的是 ServerSocket 来接受连接:

Java如何获取Socket的IP地址?-图2
(图片来源网络,侵删)
import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;
ServerSocket serverSocket = new ServerSocket(8080);
Socket clientSocket = serverSocket.accept();
// 获取客户端信息
InetAddress clientAddress = clientSocket.getInetAddress();
String clientIP = clientAddress.getHostAddress();
int clientPort = clientSocket.getPort();
// 获取服务器信息
InetAddress serverAddress = serverSocket.getInetAddress();
String serverIP = serverAddress.getHostAddress();
int serverPort = serverSocket.getLocalPort();
System.out.println("客户端IP: " + clientIP + ", 端口: " + clientPort);
System.out.println("服务器IP: " + serverIP + ", 端口: " + serverPort);

注意事项

  1. getHostAddress() 返回的是 IP 地址的字符串表示(如 "192.168.1.100")
  2. getHostName() 可能会触发 DNS 查询,可能会比较耗时
  3. 如果主机名无法解析,getHostName() 可能会返回 IP 地址本身
  4. 对于 IPv6 地址,getHostAddress() 会返回标准的 IPv6 格式(如 "::1")

方法应该能满足大多数获取 Socket IP 地址的需求。

Java如何获取Socket的IP地址?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇