java socket长连接实现心跳检测代码
时间: 2023-11-27 19:03:31 浏览: 41
以下是一个简单的 Java Socket 长连接实现心跳检测的代码示例:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SocketClient {
private static final int HEARTBEAT_INTERVAL = 5000; // 心跳间隔时间,单位毫秒
private Socket socket;
public SocketClient(String ip, int port) throws IOException {
socket = new Socket(ip, port);
}
public void start() {
new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 发送心跳包
byte[] heartBeat = "ping".getBytes();
while (true) {
outputStream.write(heartBeat);
Thread.sleep(HEARTBEAT_INTERVAL);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
if (length > 0) {
String message = new String(buffer, 0, length);
System.out.println("收到消息:" + message);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public static void main(String[] args) throws IOException {
SocketClient client = new SocketClient("127.0.0.1", 8888);
client.start();
}
}
```
在这个示例中,我们使用了两个线程,一个用于发送心跳包,另一个用于接收服务器发送的消息。发送心跳包的线程会在每个固定的时间间隔内发送一个固定的字符串,例如 "ping",而接收消息的线程则会不断地从 Socket 的输入流中读取数据,并将其打印出来。
当然,这只是一个简单的示例,实际情况下可能需要更复杂的逻辑来处理各种异常情况和错误。