使用Multipeer Connectivity(Swift 2)
问题描述:
从发件人部分接收目标iPhone中的音频文件我已经从发件人iPhone打开了一个输出流,并在接收iPhone中实现了一个输入(接收)流。我能够使用Multipeer Connectivity在同一Wi-Fi网络上连接两台设备,并发送数据(我将音频文件转换为NSData格式以通过Outputstream发送)。但是,在接收时,只有部分我发送的NSData每次我重复运行代码时,都会收到不同数量的数据。 这里是输出流代码:使用Multipeer Connectivity(Swift 2)
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文档表示 写(返回代码_:最大长度:)应与检查:
let result = outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
返回值: 字节数实际写入,或-1如果发生错误。有关错误的更多信息可以通过streamError获得。如果接收方是固定长度的流并且已达到其容量,则返回0。
我建议你检查这个返回码,并且一次一个地获取数据。