Конечный автомат. Для отсчета таймаута использовать любой таймер либо считать количество итераций в состоянии ожидания символа.
В общем виде задача имеет множество решений. Для правильного выбора надо знать, по какому признаку определять "имеется полное сообщение" и какие еще критерии важны: - если минимальный размер, то пишем свои узкоспециальные функции, если размер не важен - можно использовать универсальные библиотечные, например sscanf - важна ли скорость обработки символа, т.е. можно обрабатывать поток "на лету" или времени хватает только на укладывание символа в буфер и проверки признаков конца пакета - важна ли скорость реакции на пакет, т.е. можем ли мы сложить пакет в буфер и потом долго его разбирать, или же надо разбор делать в процессе приема и практически после прихода последнего байта иметь готовый ответ. - сколько доступно ОЗУ, т.е. хватит ли его на буфер для целого входящего пакета, или же этот входящий пакет опять же нужно разбирать на лету, выдергивая только нужные данные.
Примерно так.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|