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