Java Socket 连接状态管理

Java客户端使用Socket通信时需管理连接状态,通过周期性发送心跳包来检测连接是否断开。当检测到写数据异常时,如'Broken pipe',才确认连接已断开并执行重连操作。测试案例显示,服务端在收到特定指令后关闭连接,客户端需通过后续心跳包发送失败来感知这一变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java socket 客户端,需要对socket的连接状态进行管理,以便在socket连接断开的时候,可以实现自动重新连接;通过一系列的摸索,发现客户端只有一个方法可以判断socket连接处于断开状态,就是向socket写数据。

因此客户端需要定期向服务端写数据,如果业务数据写出不是那么频繁,则插入心跳包进行写出操作,这样才能做到比较及时的感知到socket的断开(心跳包也不宜太频繁,一般在30秒一次比较靠谱)。

 

类:连接管理

关键API:start, stop, appendOutput

public class IMConnectionSubject {

    private volatile Thread socketThread;
    private SocketRunnable socketRunnable;

    private final List<IMSocketEventListener> listeners = new ArrayList<>();
    private final BlockingQueue<byte[]> outputQueue = new ArrayBlockingQueue<>(5000);

    public void addListener(IMSocketEventListener listener) {
        synchronized (this) {
            listeners.add(listener);
        }

    }

    public void removeListener(IMSocketEventListener listener) {
        synchronized (this) {
            listeners.remove(listener);
        }
    }


    public void start(InetSocketAddress address) {
        if (socketThread == null) {
            synchronized (this) {
                if (socketThread == null) {
                    socketRunnable = new SocketRunnable(address);
                    socketThread = new Thread(socketRunnable);
                    socketThread.start();
                }
            }
        }
    }

    public void stop() {
        if (socketThread != null) {
            socketRunnable.notifyQuit();
            try {
                socketThread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


    public void appendOutput(byte[] buffer) {
        outputQueue.add(buffer);
    }


    private class SocketRunnable implements Runnabl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值