【问题标题】:iOS: Socket error operation couldn’t be completed Broken pipeiOS:无法完成 Socket 错误操作 Broken pipe
【发布时间】:2014-02-20 13:04:32
【问题描述】:

我每隔一段时间就会从 iOS 应用程序向套接字服务器(java-desktop)发送一些数据(图像字节)。 它正确发送数据。我看到一个奇怪的问题,如果 iOS 设备屏幕在从 iOS 应用程序发送数据时熄灭,然后如果我在设备上进行屏幕显示,那么我会收到以下错误并且应用程序与套接字断开连接,或者有时它会使应用程序崩溃:

Error writing to stream <__NSCFOutputStream: 0x1f5dd120>: Error Domain=NSPOSIXErrorDomain Code=32 "The operation couldn’t be completed. Broken pipe"
Stream space : 0
NSStreamEventErrorOccurred - Can not connect to the host

当设备屏幕关闭时,我的 iOS 应用停止向套接字发送数据。然后重新打开屏幕,套接字连接断开/断开管道错误。如何解决? 我搜索但还没有找到解决方案。有人可以告知这个问题的原因以及如何解决这个问题吗?

【问题讨论】:

  • Apple 以这种方式设计 ios 以减少电池使用量。您需要一个好的(阅读:提供附加值)理由才能被允许在 bg 中运行。附加值/您的用例是什么?

标签: ios


【解决方案1】:

你有两个选择。

1.禁用空闲计时器:此代码将防止您的 iPhone 在您的应用运行时进入睡眠状态。我不确定这是否会阻止设备锁定,但您可以使用 UIApplication 的 idleTimerDisabled 属性阻止屏幕变暗。

[UIApplication sharedApplication].idleTimerDisabled = YES;

来自文档:

重要提示:您应该仅在必要时设置此属性,并且应确保在不再需要时将其重置为 NO。大多数应用程序应该让系统在空闲计时器结束时关闭屏幕。这包括音频应用程序。通过适当使用音频会话服务,当屏幕关闭时,播放和录制不会中断。唯一应该禁用空闲计时器的应用程序是映射应用程序、游戏或具有零星用户交互的类似程序。

2。制作具有后台支持的应用程序:您可以在Background Modes in iOS 上关注本教程。

以下是 iOS 中可用的五种基本背景模式的简要概述:

  • 播放音频:该应用可以继续在后台播放和/或录制音频。
  • 接收位置更新:随着设备位置的变化,应用可以继续接收回调。
  • 执行有限长度的任务:一般的“随便”情况,应用可以在有限的时间内运行任意代码。
  • 处理 Newsstand Kit 下载:特定于 Newsstand 应用,该应用可以在后台下载内容。
  • 提供 IP 语音 (VoIP) 服务:该应用可以在后台运行任意代码。当然,苹果限制了它的使用,所以 您的应用也必须提供 VoIP 服务。

VOIP 后台模式允许您的应用在后台运行任意代码。这种模式比“Whatever” API 更好,因为您可以无限期地运行代码。更好的是,如果应用程序崩溃或用户重新启动手机,应用程序会在后台自动启动。有兴趣的可以关注苹果提供的Tips for Developing a VoIP App您的应用需要为用户提供某种 VoIP 功能,否则 Apple 将拒绝您的应用。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 我不确定我能不能做到。而且,我的 iOS 应用程序不断向套接字发送数据,这是该应用程序的主要目的,所以在我的应用程序关闭之前,我无法强行打开屏幕。用户也有可能手动屏蔽设备。如果我通过强行打开屏幕来修复,苹果是否会允许这样的应用程序进入 Appstore?另一个问题,当设备屏幕关闭和打开时,我可以得到任何本机通知,所以我可以暂停调用套接字连续发送数据的计时器,然后恢复?
    • [UIApplication sharedApplication].idleTimerDisabled = YES;在我的情况下不起作用,我正在使用 whiterecoon 类在 ftp 服务器上上传文件,如果 2 个文件上传之间的时间间隔超过 3 分钟,则会出现此错误
    【解决方案3】:

    您的服务器可能已停止工作或处于停止状态。重新启动服务器并运行应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2016-11-04
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多