当我尝试在延迟连接上发送数据时,它会到达服务器上,也不会在打印编写器上检测到任何错误。这也适用于心跳系统
我有一个半心跳系统运行。它的目的是检查“out”错误,如果它发生,但它永远不会。我已经为应用程序和服务器设置了KeepAlive,我正在检查out.checkError(),没有任何东西检测到延迟连接。
无论是否保持活着,都会发生同样的事情
套接字创建(发生在一个线程中):
Socket socket = new Socket(serverAddr, port);
socket.setKeepAlive(true);
Heart Beat系统(也有线程):
public void heartbeat(){
new Thread(new Runnable() {
public void run() {
while(connected == true){
try{
Thread.sleep(120000);
}catch (Exception e){
}
handlerObject.sendMessage(String.valueOf((char) 1));
}
}
}).start();
}
发送消息定义为:
public void sendMessage(String data){
try {
PrintWriter out = new PrintWriter(socket.getOutputStream());//, true);
out.println(data + "\r\n");
out.flush();
if(out.checkError()) {
socket.close();
}
}catch (Exception e){
try{
socket.close();
} catch (Exception z){
}
}
}
答案 0 :(得分:0)
我可能是防火墙阻塞服务器上的流量,请通过关闭服务器上的防火墙或添加适当的规则进行检查(因为您没有遇到任何错误,因此可能是防火墙阻塞了流量)
答案 1 :(得分:0)
这里的解决方案是使用socket.setSoTimeout(毫秒);并让服务器在此前几秒发送心跳。如果客户端在此之前没有收到心跳,它将会超时。我现在可以捕获该异常并重新连接。