outputStream.write иногда останавливает запись данных - PullRequest
0 голосов
/ 26 сентября 2019

Я использую NetService для подключения к iostreams одного устройства ios к другому, и я использую потоки для отправки / получения данных между двумя устройствами ios.Но передача данных иногда внезапно останавливается без каких-либо ошибок, и через несколько минут выдает ошибку «Тайм-аут операции. Разъем не подключен».Такое случается редко, но бывает, и я оглянулся, но не нашел решения, связанного с этим.

Вот код метода записи.

extension OutputStream {
    func write(data: Data) -> Int {

        var bytesRemaining = data.count
        var totalBytesWritten = 0
        var bytesWritten = 0

        while bytesRemaining > 0 {
                bytesWritten = data.withUnsafeBytes {
                self.write(
                    $0.advanced(by: totalBytesWritten),
                    maxLength: bytesRemaining
                )
            }


            if bytesWritten < 0 {
                return -1
            } else if bytesWritten == 0 {
                return totalBytesWritten
            }

            bytesRemaining -= bytesWritten
            totalBytesWritten += bytesWritten
       }

       return totalBytesWritten
  }//end method
}//end extension

Вот коддля метода чтения.

func readDataFrom2(_ aStreamP: Stream) {
    var buffer = [UInt8](repeating: 0, count: bufferSize)

    if aStreamP == self.connectedInputStream, let inputStream = self.connectedInputStream {

        while (inputStream.hasBytesAvailable){
            let len = inputStream.read(&buffer, maxLength: buffer.count)
            if(len > 0) {
                let streamedData = Data.init(bytes: buffer, count: len)
                self.readData += streamedData
            }//end if len > 0

        }//end whileLoop
    }//end if inputStream

}//end method

self.readData - это свойство данных класса, в котором у меня есть этот метод чтения.

...