Но мне может придти и 1-2 символа. Тогда будет опять же неправильно обработка
Нужно брать с порта по одному символу, - - - берем первый символ, запоминаем, берем второй символ, запоминаем, берем третий символ, запоминаем, собираем итоговое число из запомненных, ждем приема следующего числа... При этом нужно каждый шаг смотреть таймаут и при привышении сбрасывать на первый символ