您的位置:首页 > 编程语言 > Java开发

Java写的保持socket长连接客户端代码

2017-10-12 15:09 363 查看
public class Client {
private Socket socket = null;
private OutputStream os = null;
private InputStream is = null;

public static void main(String[] args) {
new Client().new SocketThread().start();
}

/**
* 发送心跳包
*/
public void sendHeartbeat() {
try {
String heartbeat = "heart:00001;";
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10 * 1000);// 10s发送一次心跳
os.write(heartbeat.getBytes());
os.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
} catch (Exception e) {
e.printStackTrace();
}
}

private class SocketThread extends Thread {

@Override
public void run() {
long startTime = System.currentTimeMillis();
sendHeartbeat();
while (true) {
try {
if (socket == null || socket.isClosed()) {
socket = new Socket("localhost", 8080); // 连接socket
os = socket.getOutputStream();
}
Thread.sleep(100);
is = socket.getInputStream();
int size = is.available();
if (size <= 0) {
if ((System.currentTimeMillis() - startTime) > 3 * 10 * 1000) { // 如果超过30秒没有收到服务器发回来的信息,说明socket连接可能已经被远程服务器关闭
socket.close(); // 这时候可以关闭socket连接
startTime = System.currentTimeMillis();
}
continue;
} else {
startTime = System.currentTimeMillis();
}
byte[] resp = new byte[size];
is.read(resp);
String response = new String(resp, "utf-8");
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
try {
socket.close();
is.close();
os.close();
} catch (IOException e1) {

888e
e1.printStackTrace();
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: