我已经从发送方iPhone打开了一个输出流,并在接收iPhone中实现了输入(接收)流。我能够使用多对等连接通过同一Wi-Fi网络连接两个设备并发送数据(我将音频文件转换为NSData格式以通过输出流发送)。但是在接收时,我发送的NSData中只有一部分被接收。每次我重复运行代码时,都会收到不同数量的数据。下面是输出流代码:
let outputStream: NSOutputStream = try! session.startStreamWithName(name, toPeer: session.connectedPeers[0])
print("stream created")
outputStream.delegate = self
outputStream.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream.open()
print("Before filewritten")
outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
print("filewritten")
outputStream.close()
我的输入流代码是:
var bytesRead = 0
var buffer = [UInt8](count: 15000000, repeatedValue: 0)
NSLog("%@", "didReceiveStream")
stream.delegate = self
stream.scheduleInRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
stream.open()
while (stream.hasBytesAvailable){
bytesRead = stream.read(&buffer, maxLength: buffer.count)
print("data fetched"+"(bytesRead)")
}
stream.close()
对于部分接收数据的原因以及随后更改代码以制定解决方案的任何帮助,将不胜感激。
NSOutputStream 的文档指出返回代码write(_:maxLength:)应检查:
let result = outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
返回值:实际写入的字节数,如果发生错误,则为 -1。有关错误的更多信息可以使用 streamError 获得。如果接收器是固定长度的流并且已达到其容量,则返回 0。
我建议您检查此返回代码,并按切片获取数据。