关于socket的那些事

好的,以下是使用 Spring Boot 实现带有服务器和客户端的 Socket 通信的示例代码:

服务器端代码(ServerSocket 类):

@Component
public class SocketServer {

    // 定义线程池来管理连接
    private final ExecutorService executorService = Executors.newFixedThreadPool(10);

    @PostConstruct
    public void startServer() {
        final ServerSocket serverSocket;
        try {
            serverSocket = new ServerSocket(9999);
            System.out.println("服务已启动,监听端口为9999");
            while (true) {
                final Socket socket = serverSocket.accept();
                executorService.execute(() -> handleSocket(socket));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 处理Socket连接
    private void handleSocket(Socket socket) {
        try {
            final BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("客户端发来消息:" + line);
                writer.write("服务端回复消息\n");
                writer.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}


 

客户端代码(Socket 类):

@Component
public class SocketClient {

    @Value("${client.host}")
    private String host;

    @Value("${client.port}")
    private int port;

    private Socket socket;

    public void startClient() {
        try {
            socket = new Socket(host, port);
            System.out.println("连接服务器成功");
            final BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            final Scanner scanner = new Scanner(System.in);
            String line;
            while (true) {
                // 读取控制台输入的数据
                line = scanner.nextLine();
                // 发送数据到服务端
                writer.write(line + "\n");
                writer.flush();
                // 读取服务端返回的数据
                final String response = reader.readLine();
                System.out.println("服务端回复:" + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}


 

在上述代码中,服务器端通过 Java 原生的 ServerSocket 和 Socket 实现了 Socket 服务,并使用了线程池来管理连接。客户端使用了 Java 原生的 Socket 连接服务器,并可以向服务器端发送数据和接收数据。各位大佬可以将这些代码结合到 Spring Boot 项目中,并按照自己的需求进行修改。

你可能感兴趣的:(java,开发语言)