Java TCP socket 判断对方是否在线的方法

本文介绍了两种通过Socket判断对方是否在线的方法,适用于只接收数据不发送的情况。此外,还讨论了使用javaAIO的优点,包括如何处理客户端断线的情况。

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

  不长篇大论了,设Socket io,则有两种方法判断对方是否在线:

  1:

public boolean IsLinked(){
if(io==null)return false;
return io.getRemoteSocketAddress()!=null;
}

  2:
public boolean IsLinked(){
if(io==null)return false;
return io.getLocalSocketAddress().toString().charAt(0)=='/';
}

  在线返回true,不在线返回false。特别适用于只收不发的情况,因为只收不发的情况下,假如还使用了BufferedInputStream作为输入流(这个输入流是非阻塞的,对方掉线会返回空,没有数据也返回空),那么就没有办法知道对方是否掉线了,而有些时候又不想把写好的代码改成基于InputStream(阻塞的)的算法。

  如果有频繁发送数据,可以选择使用catch()来判断,也可以所有方法同时使用。


  Server中无法用方法1判断掉线,只能用方法2,而且此方法只能识别掉线,正常关闭socket也无法识别,需要发送消息或使用超时来辅助识别。


3:

  如果使用java AIO的话,对方掉线时,channel会自动抛出异常,这种方法更好用,所以提倡大家使用AIO。

  虽然BufferedReader也会在对方掉线时抛出异常,也是一种好办法,但是有一点不如AIO,那就是BufferedReader只能传输字符流,而AIO可以传输字节流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值