Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是什么情况导致另一端的断管错误?_Android_Sockets_Broken Pipe - Fatal编程技术网

Android 是什么情况导致另一端的断管错误?

Android 是什么情况导致另一端的断管错误?,android,sockets,broken-pipe,Android,Sockets,Broken Pipe,我有一个客户端-服务器应用程序,将数据从Android手机发送到平板电脑-电话呼叫、短信、电池状况等。手机是客户端,平板电脑是服务器,两者都运行服务,部分唤醒锁让它们保持足够长的活动时间,加上客户端有一个PhoneStateListener和一个BroadcastReceiver来跟踪呼叫,电池状况等 关键是两端都保持活动状态,但在某个阶段——根据我大约20分钟的日志设置——客户机报告我有一个“断管” 在服务器端,我有一个阻塞服务器,在一个循环中,在一个线程内侦听来自客户端的单字节命令,但我还添

我有一个客户端-服务器应用程序,将数据从Android手机发送到平板电脑-电话呼叫、短信、电池状况等。手机是客户端,平板电脑是服务器,两者都运行服务,部分唤醒锁让它们保持足够长的活动时间,加上客户端有一个PhoneStateListener和一个BroadcastReceiver来跟踪呼叫,电池状况等

关键是两端都保持活动状态,但在某个阶段——根据我大约20分钟的日志设置——客户机报告我有一个“断管”

在服务器端,我有一个阻塞服务器,在一个循环中,在一个线程内侦听来自客户端的单字节命令,但我还添加了一个每分钟运行一次的线程,以找出问题的原因

当客户机检测到管道破裂时,我假设服务器套接字处于某种状态,这是导致管道破裂的原因,但我正在测试以下内容-

  • 无论插座是否打开
  • 无论输入流还是输出流是打开的
  • 它们中的任何一个是否为空
不幸的是,所有这些条件都很好,就好像 连接仍处于活动状态。我应该找什么


我希望能够做到的是,一旦客户端检测到“断管”,服务器也会检测到,并尝试重新连接

“断管”表示您已写入另一端已关闭的连接。有时它以写的形式出现,有时以读的形式出现。在所有情况下,它都是指先前的写入

在您的情况下,客户端收到此错误,因此服务器已关闭套接字。尽管有你的观察。可能您没有意识到关闭输入或输出流会关闭套接字


在您的最后一段,服务器已经关闭了套接字,因此它无法检测到客户端是否出现错误,但这并不重要,因为它没有套接字来采取纠正措施。客户端所要做的就是重新连接。服务器可能无法重新连接。

谢谢您的回复。服务器并不是故意关闭套接字,我在某个地方读到过,套接字连接可能会在一段时间后丢失,这是由于睡眠一段时间-可能是一个阻塞服务器的事实?目前这是一个while循环,我可能会改为非阻塞设置,而改为定时器和定时器任务设置。我不明白的是,我在服务器服务中运行的“主管线程”无法检测套接字状态的任何变化,但它会检测套接字何时关闭,服务何时有意关闭。