java 判断tcp连接断开连接_网络通信之检测远端连接是否断开连接

本文介绍了两种检测TCP连接是否断开的方法:一是通过输入流的read方法,二是自定义心跳机制。read方法在对方断开连接时会返回-1或抛出异常。建议使用read方法,而sendUrgentData可能存在不可预测的问题。同时提供了一个基于心跳的抽象通道处理类示例,用于判断连接是否关闭。

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

判断对方是否断开连接:

一、方法层面的实现:

1,使用输入流的read方法:

输入流的read(byte[] ,int ,int) 方法,表示从当前的通道中读取数据,具体读取到的数据有返回的int值决定;这里的返回值和抛出的异常很重要,如果抛出IOException异常,很明显连接已经断开;

返回值说明:

针对于基于tcp/ip协议的socket连接说明:

如果没有设置socket的soTimeout属性,那么该方法将是一个阻塞方法,可以通过设置socket的soTimeout属性,让read方法退出。

注意:read方法如果timeout将以抛出socketTimeoutException异常;

客户端:

如果对方断开连接,客户端的read方法将返回-1;

服务器端:

如果对方断开连接,服务器端的read方法将抛出IOException异常;

提示:

建议使用这种方式,netty底层源码就是使用的这种方式实现的;

2,使用socket 的sendUrgentData(int) :

注意:不建议使用此种方式,因为使用该方式有很多不可预测的情况;

通常情况是:接收端没有开启socket的SO_OOBINLINE属性,那么使用sendUrgentData(int)测试连接时,在发送17次(windows测试数据)时会发生异常;而如果接收端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值