以下是一个简单的 Java Socket 服务端示例,按照心跳接收客户端连接,并收发数据。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    private static final int PORT = 8888; // 服务端口号
    private static final int HEARTBEAT_INTERVAL = 5000; // 心跳间隔时间,单位为毫秒

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket clientSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            // 创建 ServerSocket 实例,并绑定端口号
            serverSocket = new ServerSocket(PORT);
            System.out.println("Server started on port " + PORT);

            while (true) {
                // 接收客户端连接
                clientSocket = serverSocket.accept();
                System.out.println("Client connected: " + clientSocket.getRemoteSocketAddress());

                // 开启心跳线程
                new HeartbeatThread(clientSocket).start();

                // 创建输入输出流
                out = new PrintWriter(clientSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

                // 循环接收和发送数据
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println("Received from client " + clientSocket.getRemoteSocketAddress() + ": " + inputLine);
                    out.println("Server received: " + inputLine);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
                if (clientSocket != null) {
                    clientSocket.close();
                }
                if (serverSocket != null) {
                    serverSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 心跳线程
    private static class HeartbeatThread extends Thread {
        private Socket clientSocket;

        public HeartbeatThread(Socket clientSocket) {
            this.clientSocket = clientSocket;
        }

        @Override
        public void run() {
            try {
                while (true) {
                    Thread.sleep(HEARTBEAT_INTERVAL);
                    clientSocket.getOutputStream().write(0);
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

在上面的示例中,我们首先创建了一个 ServerSocket 实例,并绑定了端口号。然后我们进入一个无限循环,不断接收客户端连接。

在接收到客户端连接后,我们首先开启了一个心跳线程,用来定时向客户端发送心跳包。然后我们创建了输入输出流,用来接收和发送数据。

在接收到客户端的数据后,我们将数据打印出来,并将处理后的数据发送回客户端。

最后,我们在程序结束时关闭输入输出流和客户端连接

给我一个java socket服务端按照心跳接收客户端连接并收发数据的例子

原文地址: http://www.cveoy.top/t/topic/fhlL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录