Java获取终端IP的实现方法

1. 整体流程

首先我们来看一下获取终端IP的整体流程,如下表所示:

步骤 描述
步骤1 创建一个ServerSocket对象,监听指定的端口
步骤2 接收一个客户端请求,建立与客户端的Socket连接
步骤3 获取Socket连接的InetAddress对象
步骤4 从InetAddress对象中获取终端IP

下面我们将逐步介绍每一步的具体实现方法。

2. 实现步骤

步骤1:创建ServerSocket对象

首先,我们需要创建一个ServerSocket对象来监听指定的端口。可以使用以下代码实现:

import java.io.IOException;
import java.net.ServerSocket;

public class Main {
    public static void main(String[] args) {
        int port = 8080; // 指定监听的端口号
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server started on port: " + port);
            
            // 步骤2:接收客户端请求,建立Socket连接
            // ...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤2:接收客户端请求,建立Socket连接

接下来,我们需要在ServerSocket对象上调用accept()方法接收客户端请求,并建立与客户端的Socket连接。可以使用以下代码实现:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {
    public static void main(String[] args) {
        int port = 8080; // 指定监听的端口号
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server started on port: " + port);

            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected: " + clientSocket.getInetAddress());
            
            // 步骤3:获取Socket连接的InetAddress对象
            // ...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤3:获取InetAddress对象

在步骤2中,我们已经和客户端建立了Socket连接,现在我们需要从Socket连接中获取InetAddress对象。可以使用以下代码实现:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;

public class Main {
    public static void main(String[] args) {
        int port = 8080; // 指定监听的端口号
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server started on port: " + port);

            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected: " + clientSocket.getInetAddress());

            InetAddress clientAddress = clientSocket.getInetAddress();
            
            // 步骤4:从InetAddress对象中获取终端IP
            // ...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤4:获取终端IP

最后,我们需要从InetAddress对象中获取终端的IP地址。可以使用以下代码实现:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;

public class Main {
    public static void main(String[] args) {
        int port = 8080; // 指定监听的端口号
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Server started on port: " + port);

            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected: " + clientSocket.getInetAddress());

            InetAddress clientAddress = clientSocket.getInetAddress();
            String clientIP = clientAddress.getHostAddress();
            System.out.println("Client IP: " + clientIP);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

序列图

下面是该过程的序列图,用于更清晰地展示整个过程:

sequenceDiagram
    participant Server as Server
    participant Client as Client

    Server->>ServerSocket: 创建ServerSocket对象
    ServerSocket->>Server: 监听指定端口
    Server->>Client: 建立Socket连接
    Server->>Client: 获取终端IP
    Client-->>Server: 返回终端IP

结论

通过以上步骤的实现,我们可以成功获取到客户端的终端IP地址。