Прочитать и распечатать закодированное сообщение, полученное с сервера, которое хранится в буфере типа UnsafeMutablePointer - PullRequest
0 голосов
/ 06 марта 2020

Я получаю сообщение от локального хост-сервера. Сервер отправляет мне сообщение в формате XML, UTF-8 encoded. Это сообщение хранится в переменной с именем buffer типа UnsafeMutablePointer<UInt8>. Теперь я попытался напечатать этот буфер, но все, что он показывает, это 0, он работает, если я отправляю строку, которая не закодирована, но требуется, чтобы отправляемая строка кодировалась в `` `UTF-8``

Вот код, который я использую для чтения сообщения:

let maxreadlength = 4096
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: maxreadlength)

while InputStream.hasBytesAvailable {
      let numberOfBytesRead = InputStream.read(buffer, maxLength: maxreadlength)

      if numberOfBytesRead < 0, let error = InputStream.streamError{
           print(error)
           break
      }
}

let output = String(cString: buffer)
print("server output is: \(output)")

Полученное сообщение XML должно выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<Details>
 <response>
  <name>Name</name>
  <ip>127.0.0.1</ip>
 </response>
</Details>

Может кто-нибудь помочь мне сказать, что я делаю неправильно и что я могу сделать, чтобы расшифровать сообщение?

Вот что я пробовал:

let output2 = String(describing: output.cString(using: String.Encoding.utf8))

это тоже не сработало. Я попробовал несколько других, похожих на это, но ни один из них, похоже, не работал.

1 Ответ

1 голос
/ 06 марта 2020

Объявите буфер просто как [UInt8]

let maxreadlength = 4096
var buffer = [UInt8](repeating: 0, count: maxreadlength)

и прочитайте данные

let numberOfBytesRead = InputStream.read(&buffer, maxLength: maxreadlength)

, затем создайте строку

let string = String(bytes: buffer, encoding: .utf8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...