【问题标题】:iOS swift socket communication: release outstreamiOS swift socket通信:释放outstream
【发布时间】:2020-11-10 14:02:38
【问题描述】:

我跟着this tutorial做了最简单的socket通信,只是为了交换字符串消息。但是,当我写入外流时,它似乎永远不会被释放,直到我终止应用程序 - 然后服务器接收一大块中的所有内容。我搜索了解决方案,发现类似的问题和问题,没有解决方案。这是我的代码:

class Peer: NSObject {
  weak var delegate: PeerDelegate?
  var inputStream: InputStream!
  var outputStream: OutputStream!

  var username = ""
  let maxReadLength = 4096

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

  CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,"192.168.43.1" as CFString,6000,&readStream,&writeStream)
  inputStream = readStream!.takeRetainedValue()
  outputStream = writeStream!.takeRetainedValue()
  inputStream.schedule(in: .current, forMode: .common)
  outputStream.schedule(in: .current, forMode: .common)
  inputStream.open()
  outputStream.open()

  inputStream.delegate = self


}
    func sendText(text: String) {
      print("Sending", text)
      let data = text.data(using: .utf8)!
        data.withUnsafeBytes {
        guard let pointer = $0.baseAddress?.assumingMemoryBound(to: UInt8.self) else {
          print("Error sending text")
          return
        }
        outputStream.write(pointer, maxLength: data.count)
        print("DONE")
      }
}
}

您可能会注意到,还有一个委托监视流并响应传入数据。我不能简单地来回发送字符串,这让我很困扰。它可能是服务器端问题,它等待更多,但如果我用 Android 运行它,它就可以在没有额外内容的情况下工作。我试图完成、释放和关闭流以产生类似于应用程序终止的东西,但没有成功。似乎没有 Java 中的刷新命令。有什么想法吗?

【问题讨论】:

    标签: ios swift sockets


    【解决方案1】:

    好的,解决方案似乎是用换行符结束字符串 \n

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2015-09-27
      • 1970-01-01
      • 2019-08-12
      • 2011-09-25
      • 2020-04-03
      相关资源
      最近更新 更多