1

Я открыл выходной поток от отправителя iPhone, а также реализовал поток ввода (приема) в принимающем iPhone. Я могу подключить оба устройства по той же сети Wi-Fi, используя Multipeer Connectivity, и отправить данные (я преобразовал аудиофайл в формат NSData для отправки его через Outputstream). Но при приеме только часть NSData, которую я отправил Получается. И каждый раз, когда я повторяю выполнение кода, получает различный объем данных. Вот код выходного потока:Аудиофайл частично получен в целевом iPhone от отправителя с использованием 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() 

Любой помощь относительно причины этого частичного получения данных и последующих изменений в коде, чтобы сформулировать завещание решения быть чрезвычайно оцененным.

ответ

2

Документация NSOutputStream указывает, что код возврата записи (_: MAXLENGTH :) должно быть проверено с:

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

Возвращаемое значение: Количество байт на самом деле написано, или -1 если произошла ошибка. Более подробную информацию об ошибке можно получить с помощью streamError. Если приемник является потоком фиксированной длины и достиг своей емкости, возвращается 0.

Я рекомендую вам проверить этот код возврата и получить данные по срезу.

Смежные вопросы