【发布时间】: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 中的刷新命令。有什么想法吗?
【问题讨论】: