2016-04-26 3 views
0

Я использую быструю библиотеку сокетов с помощью следующего кода:Отправка сообщения по протоколу TCP в Swift (NULL прекращено)

let client:TCPClient = TCPClient(addr: "127.0.0.1", port: 8080) 
var (success,errmsg)=client.connect(timeout: 1) 
if success{ 
    var (success,errmsg)=client.send(str:"|~\0") 
    if success{ 
     let data=client.read(1024*10) 
     if let d=data{ 
      if let str=String(bytes: d, encoding: NSUTF8StringEncoding){ 
       print(str) 
      } 
     } 
    }else{ 
     print(errmsg) 
    } 
}else{ 
    print(errmsg) 
} 

код работает, но моя проблема в том, что мой сервер получает данные без нуль-терминатором, как вы можете видеть по следующей ссылке: https://gyazo.com/1a6576b515d37c9400a58ac67bfa2350 Что мне делать?

ответ

0

Предположив вы используете this library, есть ошибка в реализации TCPClient.send(str:), так как он использует strlen на this line. strlen будет прерван на первом NUL персонаже.

Изменить код:

var (success, errmsg) = client.send(data:Array<UInt8>("|~\0".utf8)) 

и вы должны быть хорошо

+0

Вы привели меня к решению! Решение: let str = "test" let byteArray = [UInt8] (str.utf8) –

+0

Спасибо большое @Stuart Carnie –

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