【JAVA】创建一个建单的TCP服务端和客户端

发布于:2025-09-06 ⋅ 阅读:(21) ⋅ 点赞:(0)

SimpleTcpServer

package main;
import java.io.*;
import java.net.*;

public class SimpleTcpServer {
    // 服务器监听的端口
    private static final int PORT = 8888;

    public static void main(String[] args) {
        ServerSocket serverSocket = null;

        try {
            // 创建服务器套接字,绑定到指定端口并开始监听
            serverSocket = new ServerSocket(PORT);
            System.out.println("TCP服务器已启动,正在监听端口: " + PORT);

            // 循环接受客户端连接
            while (true) {
                // 阻塞等待客户端连接
                Socket clientSocket = serverSocket.accept();
                System.out.println("新客户端连接: " +
                        clientSocket.getInetAddress().getHostAddress() +
                        ":" + clientSocket.getPort());

                // 为每个客户端连接创建一个新线程处理,避免阻塞主线程
                new Thread(() -> handleClient(clientSocket)).start();
            }

        } catch (IOException e) {
            System.err.println("服务器启动失败: " + e.getMessage());
        } finally {
            // 关闭服务器套接字
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                    System.out.println("服务器已关闭");
                } catch (IOException e) {
                    System.err.println("关闭服务器时发生错误: " + e.getMessage());
                }
            }
        }
    }

    /**
     * 处理客户端连接的方法
     */
    private static void handleClient(Socket clientSocket) {
        try (
                // 获取输入流,用于读取客户端发送的消息
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(clientSocket.getInputStream()));

                // 获取输出流,用于向客户端发送消息
                PrintWriter out = new PrintWriter(
                        new BufferedWriter(
                                new OutputStreamWriter(clientSocket.getOutputStream())),
                        true)
        ) {
            String clientMessage;
            // 读取客户端发送的消息,直到客户端关闭连接
            while ((clientMessage = in.readLine()) != null) {
                System.out.println("收到来自客户端的消息: " + clientMessage);

                // 向客户端发送响应
                String response = "服务器已收到: " + clientMessage;
                out.println(response);
                System.out.println("已向客户端发送响应: " + response);
            }

            System.out.println("客户端已断开连接");

        } catch (IOException e) {
            System.err.println("与客户端通信时发生错误: " + e.getMessage());
        } finally {
            // 关闭客户端连接
            try {
                clientSocket.close();
            } catch (IOException e) {
                System.err.println("关闭客户端连接时发生错误: " + e.getMessage());
            }
        }
    }
}

TcpClient

package main;

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

public class TcpClient {
    public static void main(String[] args) {
        // 服务器IP和端口
        String serverIp = "127.0.0.1";
        int serverPort = 8888;

        // 用于存储从服务器接收的消息
        String serverMessage = null;

        try (
                // 建立与服务器的连接
                Socket socket = new Socket(serverIp, serverPort);

                // 获取输出流,用于向服务器发送消息
                PrintWriter out = new PrintWriter(
                        new BufferedWriter(
                                new OutputStreamWriter(socket.getOutputStream())),
                        true);

                // 获取输入流,用于接收服务器的消息
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()))
        ) {
            System.out.println("已成功连接到TCP服务器: " + serverIp + ":" + serverPort);

            // 发送消息到服务器
            String messageToSend = "Hello from TCP client!";
            out.println(messageToSend);
            System.out.println("已发送消息: " + messageToSend);

            // 接收服务器返回的消息
            serverMessage = in.readLine();
            if (serverMessage != null) {
                System.out.println("从服务器接收的消息: " + serverMessage);
            } else {
                System.out.println("未收到服务器的响应");
            }

        } catch (IOException e) {
            System.err.println("连接或通信过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到