未检测到Java / Android Dead Connection

时间:2016-08-26 04:33:01

标签: java android

当我尝试在延迟连接上发送数据时,它会到达服务器上,也不会在打印编写器上检测到任何错误。这也适用于心跳系统 我有一个半心跳系统运行。它的目的是检查“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){

            }
        }
    }

2 个答案:

答案 0 :(得分:0)

我可能是防火墙阻塞服务器上的流量,请通过关闭服务器上的防火墙或添加适当的规则进行检查(因为您没有遇到任何错误,因此可能是防火墙阻塞了流量)

答案 1 :(得分:0)

这里的解决方案是使用socket.setSoTimeout(毫秒);并让服务器在此前几秒发送心跳。如果客户端在此之前没有收到心跳,它将会超时。我现在可以捕获该异常并重新连接。