1

我已经从发送方 iPhone 打开了一个输出流,并在接收方 iPhone 中实现了一个输入(接收)流。我可以使用 Multipeer Connectivity 通过同一个 Wi-Fi 网络连接两个设备并发送数据(我将音频文件转换为 NSData 格式以通过 Outputstream 发送)。但是在接收时,我发送的只有部分 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()

任何有关部分接收数据的原因以及随后更改代码以制定解决方案的任何帮助都将不胜感激。

4

1 回答 1

2

NSOutputStream 的文档表明 write(_:maxLength:) 的返回码应检查:

let result = outputStream.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)

返回值:实际写入的字节数,如果发生错误,则返回 -1。可以使用 streamError 获得有关错误的更多信息。如果接收者是一个固定长度的流并且已达到其容量,则返回 0。

我建议您检查此返回代码,并按切片获取数据。

于 2016-03-31T13:06:53.897 回答