如果自己去实现心跳功能其实最土的办法是隔一定时间向服务端发送一个心跳包,然后服务端如果收到了,服务端就发送一个响应信号,如果客户端在一定的时间间隔内取得了这个响应,那么连接是正常的,如果没有取得,那么重连这个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();
}
}
}
为 TCP 套接字设置 keepalive 选项时,如果在 2 个小时(注:实际值与实现有关)内在任意方向上都没有跨越套接字交换数据,则 TCP 会自动将 keepalive 探头发送到同位体。此探头是同位体必须响应的 TCP 段。
期望的响应为以下三种之一:
1. 同位体通过期望的 ACK 响应。不通知应用程序(因为一切正常)。在另一个 2 小时的不活动时间过后,TCP 将发送另一个探头。
2. 同位体通过 RST 响应,通知本地 TCP 同位体主机已崩溃并重新启动。套接字被关闭。
3. 同位体没有响应。套接字被关闭。 此选项的目的是检测同位体主机是否崩溃。 仅对 TCP 套接字(SocketImpl)有效。
更多说明参见 java.net.SocketOptions 接口。
分享到:
相关推荐
java Socket心跳事例
很多人在写Socket的时候会遇到心跳包响应机制跟主线程消息传输机制如何规避而互不影响,本Demo就解决了此问题,而且简单易懂,都有备注,欢迎下载学习之用。
Java Socket通信 心跳测试代码
主要是关于java tcp长连接,心跳连接源码。
客户端与服务端保持在线的心跳连接代码示例。一般用于保持socket长连接或者周期性上传客户端状态。
C# socket心跳 C# socket心跳 C# socket心跳 C# socket心跳
C#高级编程之实现Socket心跳机制,TCP网络长连接。 心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么...
tcp长连接,与服务器端保持长连接,发送心跳包。保持连接。
Socket长连接+心跳包+发送+读取,用到的全在这里了,自己看看哪里不需要的就不要添加了!代码很清晰很明白了!
winform的socket通信中连接是否正常,最好通过心跳包来确定,本程序就是一个简单的心跳包实例,简单、易懂~
本人测试可用,分析下安卓的Socket长连接心跳,实现了服务端和客户端
java语言 建立网络通讯长连接示例(心跳测试)
由于移动设备的网络的复杂性,经常会出现网络断开,如果没有心跳包的检测,客户端只会在需要发送数据的时候才知道自己已经断线,会延误,甚至丢失服务器发送过来的数据。一下简单建立一个带有心跳检测的SocketDemo。
主要介绍了C#使用Socket实现心跳的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
3、socket功能类库模块(其他项目也可以引用),socket类库模块功能齐全,只需调用其中方法即可,复用性较强,代码注释详细,实现了心跳,解决了粘包问题,异步发送接收数据,等等,bin目录下右运行日志方便查找程序...
C#开发的高性能服务器+-+端口-心跳高性能Socket服务器; 完善的服务器并发处理机制,比较稳定。
C# 高性能服务器 - 端口-心跳高性能Socket服务器 为啥不能设置免费分了呢 最低的都要两分
主要介绍了C# 实现Scoket心跳机制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这是Android的socket长连接(心跳包),由于本人项目中需要用到长连接,所以先做了个demo,亲测是没有问题的。
一个Socket连接管理器(心跳机制)