我有一个客户端-服务器应用程序,将数据从 Android 手机发送到平板电脑 - 电话、短信、电池状况等。手机是客户端,平板电脑是服务器,两者都运行服务,并使用部分唤醒锁来保留它们存活时间足够长,加上客户端有一个 PhoneStateListener 和一个 BroadcastReceiver 来跟踪呼叫、电池状况等。
关键是两端都保持活力,但在某个阶段 - 根据我的日志记录设置大约 20 分钟 - 客户端报告我有一个“断管”。
在服务器端,我有一个阻塞服务器,在一个循环中,在一个线程中侦听来自客户端的单字节命令,但我还添加了一个每分钟运行一次的线程,找出导致问题的原因。
当客户端检测到管道损坏时,我假设存在服务器套接字处于其中的情况,这会导致它,但我正在测试以下内容 -
- Socket 是否打开。
- 输入或输出流是否打开,
- 它们中的任何一个是否为空。
不幸的是,所有这些条件都很好,就好像
连接仍然处于活动状态。我应该寻找什么?
我想要做的是一旦客户端检测到“断管”,服务器也会这样做,并尝试重新连接。