Java Socket 测试链接 Demo

在网络编程中,Socket 是一种通信协议,它允许应用程序在网络中进行双向通信。在 Java 中,我们可以使用 java.net 包中的类来实现 Socket 通信。本文将通过一个简单的示例,展示如何使用 Java Socket 进行测试链接。

1. 基本概念

在 Java 中,Socket 通信主要分为两个部分:服务器端(Server)和客户端(Client)。服务器端负责监听客户端的连接请求,而客户端则负责发起连接请求。一旦连接建立,双方就可以进行数据传输。

2. 服务器端实现

首先,我们来实现服务器端。服务器端的主要任务是监听客户端的连接请求,并接收客户端发送的数据。

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        int port = 12345; // 服务器监听的端口号
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("服务器启动,监听端口:" + port);

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("客户端连接成功:" + clientSocket.getInetAddress().getHostAddress());

                try (InputStream input = clientSocket.getInputStream();
                     BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
                    String line;
                    while ((line = reader.readLine()) != null) {
                        System.out.println("收到客户端消息:" + line);
                    }
                } finally {
                    clientSocket.close();
                }
            }
        } catch (IOException e) {
            System.out.println("服务器异常:" + e.getMessage());
        }
    }
}

3. 客户端实现

接下来,我们实现客户端。客户端的主要任务是连接服务器,并发送数据。

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        String host = "127.0.0.1"; // 服务器的 IP 地址
        int port = 12345; // 服务器监听的端口号

        try (Socket socket = new Socket(host, port);
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
            System.out.println("客户端启动,连接服务器:" + host + ":" + port);

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println("收到服务器消息:" + inputLine);
            }

            out.println("Hello Server!");
        } catch (UnknownHostException e) {
            System.out.println("无法解析主机名:" + e.getMessage());
        } catch (IOException e) {
            System.out.println("I/O 异常:" + e.getMessage());
        }
    }
}

4. 运行示例

首先,运行服务器端程序。然后,运行客户端程序。客户端将连接到服务器,并发送一条消息。服务器将接收到这条消息,并打印出来。

5. 关系图

以下是服务器端和客户端之间的关系图:

erDiagram
    SERVER ||--o| CLIENT : "连接"
    CLIENT {
        int port
        String host
    }
    SERVER {
        int port
    }

6. 结论

通过本文的示例,我们可以看到 Java Socket 通信的基本实现方式。服务器端负责监听端口,接收客户端的连接请求;客户端则负责连接服务器,并发送数据。这种通信方式在网络编程中非常常见,可以用于实现各种网络应用。希望本文能够帮助读者更好地理解 Java Socket 通信的基本原理和实现方式。