Чтение строковых сообщений с разделителями из NSData из FileHandle через CFSocket - PullRequest
0 голосов
/ 31 августа 2011

Я получаю строковые сообщения через сокетное соединение, и, как я получаю байты из соответствующего дескриптора файла, я создаю строку из них.

[NSString stringWithCString:[data bytes] encoding:NSASCIIStringEncoding]

Теперь этот вид работает нормально, но, как я пыталсярегистрировать эти строки, я получаю их правильно большую часть времени, но между ними я получаю некоторые символы мусора.я попробовал это с utf8bytes и с ascii как выше (сообщения все равно ascii).

я получаю данные через уведомления как это:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveData:) name:NSFileHandleDataAvailableNotification object:fileHandle];
[fileHandle waitForDataInBackgroundAndNotify];

я предполагаю, что однажды загрузка сообщенийувеличивается, искаженные части строки отображаются в журнале.само сообщение чисто и строго алфавитно-цифровое (плюс разделитель @ ";" и точки в числах с плавающей точкой)

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

любая помощь приветствуется!

1 Ответ

1 голос
/ 31 августа 2011

Вы, вероятно, копируете свои данные тем способом, которым вы их конвертируете.Не гарантируется, что данные будут доставлены в идеальных границах в стиле Си.Вызов stringWithCString читает каждый буфер данных, доставленный до нулевого символа, а затем освобождает все оставшиеся байты.Вы должны накопить все свои буферы данных перед выполнением любого преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...