【问题标题】:Handling inputStream.open() error in Swift在 Swift 中处理 inputStream.open() 错误
【发布时间】:2021-01-08 13:12:45
【问题描述】:

我正在尝试构建一个 iOS 应用程序,该应用程序通过 TCP 套接字从本地服务器读取 JSON 数据。如果应用程序加载时服务器可用,一切正常,但如果服务器不可用,当我尝试打开输入流时,它会向控制台抛出错误。我正在尝试找到一种方法来捕获此错误并进行处理。我希望该应用程序继续尝试连接,直到服务器可用。但由于该方法不返回任何值或抛出错误,我没有说明如何确定这种情况何时发生。

(顺便说一句,我收到的错误是“Socket SO_ERROR [61: Connection refused]”

如果有任何建议,我将不胜感激!谢谢

我的代码:


var inputStream: InputStream!
    
func setupNetworkCommunication() {
        
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?

CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
                                           K.serverIPAddress as CFString,
                                           K.serverPort,
                                           &readStream,
                                           &writeStream)
        
inputStream = readStream!.takeRetainedValue()
inputStream.delegate = self
inputStream.schedule(in: .current, forMode: .common)
inputStream.open() 

【问题讨论】:

  • 在调用open() 之后,您可能需要使用属性streamError 检查流的错误。或者,检查来自 Darwin.C. 的全局变量 errno

标签: ios swift tcp


【解决方案1】:

错误似乎在您的 readStream!.takeRetainedValue() 行中,您可以在项目中添加异常断点以处理崩溃吗?然后我会尽力在这篇文章中帮助你:)

按照以下步骤操作:

  • 从面板打开 XCode 断点菜单
  • 添加异常断点到 你的项目
  • 检查并运行项目。

请查看如何添加断点:

Xcode 会在崩溃时自动阻止您。请通知我结果。 编码愉快!

【讨论】:

  • 感谢您的建议。我试过了,但从未调用过断点。我意识到实际上 xcode 并没有崩溃,只是给我一个无法连接的错误。逐行单步执行 - 很明显,错误消息出现在 inputStream.open() 上。然而,它仍然给我留下了试图捕捉这一点的问题——这样我就可以继续尝试定期打开输入流。我遇到的问题是 inputStream.open() 没有返回任何内容,也没有抛出任何错误
  • 我将更新帖子以反映它实际上并没有崩溃 - 但我仍然想尝试捕获错误。谢谢!
猜你喜欢
  • 2015-02-21
  • 1970-01-01
  • 2016-12-14
  • 2015-02-06
  • 1970-01-01
  • 2015-09-06
  • 2016-10-17
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多