Android 是什么情况导致另一端的断管错误?
我有一个客户端-服务器应用程序,将数据从Android手机发送到平板电脑-电话呼叫、短信、电池状况等。手机是客户端,平板电脑是服务器,两者都运行服务,部分唤醒锁让它们保持足够长的活动时间,加上客户端有一个PhoneStateListener和一个BroadcastReceiver来跟踪呼叫,电池状况等 关键是两端都保持活动状态,但在某个阶段——根据我大约20分钟的日志设置——客户机报告我有一个“断管” 在服务器端,我有一个阻塞服务器,在一个循环中,在一个线程内侦听来自客户端的单字节命令,但我还添加了一个每分钟运行一次的线程,以找出问题的原因 当客户机检测到管道破裂时,我假设服务器套接字处于某种状态,这是导致管道破裂的原因,但我正在测试以下内容-Android 是什么情况导致另一端的断管错误?,android,sockets,broken-pipe,Android,Sockets,Broken Pipe,我有一个客户端-服务器应用程序,将数据从Android手机发送到平板电脑-电话呼叫、短信、电池状况等。手机是客户端,平板电脑是服务器,两者都运行服务,部分唤醒锁让它们保持足够长的活动时间,加上客户端有一个PhoneStateListener和一个BroadcastReceiver来跟踪呼叫,电池状况等 关键是两端都保持活动状态,但在某个阶段——根据我大约20分钟的日志设置——客户机报告我有一个“断管” 在服务器端,我有一个阻塞服务器,在一个循环中,在一个线程内侦听来自客户端的单字节命令,但我还添
- 无论插座是否打开
- 无论输入流还是输出流是打开的
- 它们中的任何一个是否为空
我希望能够做到的是,一旦客户端检测到“断管”,服务器也会检测到,并尝试重新连接 “断管”表示您已写入另一端已关闭的连接。有时它以写的形式出现,有时以读的形式出现。在所有情况下,它都是指先前的写入 在您的情况下,客户端收到此错误,因此服务器已关闭套接字。尽管有你的观察。可能您没有意识到关闭输入或输出流会关闭套接字
在您的最后一段,服务器已经关闭了套接字,因此它无法检测到客户端是否出现错误,但这并不重要,因为它没有套接字来采取纠正措施。客户端所要做的就是重新连接。服务器可能无法重新连接。谢谢您的回复。服务器并不是故意关闭套接字,我在某个地方读到过,套接字连接可能会在一段时间后丢失,这是由于睡眠一段时间-可能是一个阻塞服务器的事实?目前这是一个while循环,我可能会改为非阻塞设置,而改为定时器和定时器任务设置。我不明白的是,我在服务器服务中运行的“主管线程”无法检测套接字状态的任何变化,但它会检测套接字何时关闭,服务何时有意关闭。