Как захватить асинхронные и прерывистые данные в iOS? - PullRequest
0 голосов
/ 28 октября 2011

Платформа: iOS с TCP / IP-связью.

Ниже приведен пример моего входящего потока данных.

$ PLTIT, HV, 0,20, М, 0,00, Д, -58,70, D, 0,30, М * 71
$ PLTIT, HV, 1,90, М, 0,00, D, -8,30, D, 1,90, М * 41

Действительный фрейм сообщения выглядит так:

$PLTIT,HV,1.90,M,0.00,D,-8.30,D,1.90,M*41

Но могут быть моменты, когда я получаю это:

[time n+0]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71
[time n+1]  $PLTIT,HV,1.90,M,
[time n+2]  0.00,D,-8.30,D,1.90
[time n+3]  ,M*41
[time n+4]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71
[time n+5]  $PLTIT,HV,0.20,M,
[time n+6]  0.00,D,-58.70,D,0.30,M*71
[time n+7]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71
[time n+8]  $PLTIT,HV,0.20,M,0.00,D,-58.70,D,0.30,M*71

В результате получается разбитый фрейм сообщения посередине.

Какие объекты / контейнеры я могу использовать под iOS, чтобы я мог правильно собрать все байты данных для анализа и не потерять биты из-за некоторой прерывистой связи или оборудования?

1 Ответ

0 голосов
/ 28 октября 2011

Простой буфер любого сорта должен делать свое дело.Если ваши данные всегда текстовые, вы можете просто добавить к NSMutableString.

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

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