TCP通信客户端Socket 心跳线程的实现

http://www.myexception.cn/j2se/717145.html

 

TCP通信客户端Socket 心跳线程的实现
如果自己去实现心跳功能其实最土的办法是隔一定时间向服务端发送一个心跳包,然后服务端如果收到了,服务端就发送一个响应信号,如果客户端在一定的时间间隔内取得了这个响应,那么连接是正常的,如果没有取得,那么重连这个socket.
我想如果JDK已经实现了这个功能的话,那我就没必要自己再去造轮子了。

参考了一下网上的资料,说是socket.setKeepAlive(true)就实现了心跳包的发送功能,我不知道这个API每隔多少时间去发送一次,还是这种用法有些误解,我假定这种用法是对的,那么,心跳时间间隔我自己实现:
在Client中

心跳线程中的

Java code
Socket socket= Socket("127.0.0.1",8080);
socket.setKeepAlive(true);



run里如下实现,每隔60秒触发一下,

Java code
public void run{

while(true){
if(socket.getKeepAlive){

System.out.println("Client connect to Server is OK");
}else{
socket=soket("127.0.0.1",8080);
}


try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}


}




------解决方案--------------------
所谓超时其实都是定时检测。
------解决方案--------------------
心跳,第一次听说这个名词
------解决方案--------------------
也没有听说这个东东...

我想这样定会产生阻塞..
------解决方案--------------------
学习......
------解决方案--------------------
以下摘自 JDK API 文档:

为 TCP 套接字设置 keepalive 选项时,如果在 2 个小时(注:实际值与实现有关)内在任意方向上都没有跨越套接字交换数据,则 TCP 会自动将 keepalive 探头发送到同位体。此探头是同位体必须响应的 TCP 段。
期望的响应为以下三种之一:
1. 同位体通过期望的 ACK 响应。不通知应用程序(因为一切正常)。在另一个 2 小时的不活动时间过后,TCP 将发送另一个探头。
2. 同位体通过 RST 响应,通知本地 TCP 同位体主机已崩溃并重新启动。套接字被关闭。
3. 同位体没有响应。套接字被关闭。 此选项的目的是检测同位体主机是否崩溃。 仅对 TCP 套接字(SocketImpl)有效。

更多说明参见 java.net.SocketOptions 接口。
------解决方案--------------------
应该在2台机子那测试1下的
------解决方案--------------------

探讨
以下摘自 JDK API 文档:

为 TCP 套接字设置 keepalive 选项时,如果在 2 个小时(注:实际值与实现有关)内在任意方向上都没有跨越套接字交换数据,则 TCP 会自动将 keepalive 探头发送到同位体。此探头是同位体必须响应的 TCP 段。
期望的响应为以下三种之一:
1. 同位体通过期望的 ACK 响应。不通知应用程序(因为一切正常)。在另一个 2 小时的不活动时间过后,TCP 将发送另一个探头。
2. 同位体通过 RST 响应,通…


------解决方案--------------------
学习
------解决方案--------------------
只能自己写心跳程序的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值