Устройство содержит модем HiLoNC под управлением контроллера и работает как TCP-клиент. Сообщения серверу передаются как в случае возникающих в устройстве событий, так и в случае запросов от сервера. Контроллер постоянно опрашивает статус ТСP-соединения модема (+KTCPSTAT) и при наличии в модеме принятых от сервера байтов, вчитывает их командой +KTCPRCV, распознает принятый запрос и выдает ответ командой +KTCPSND. Долгое время не замечал один глюк (покольку редко встречается в реальной работе устройства), а именно: Если с сервера выдать две команды подряд с интервалом до 1сек, то иногда возникает ситуация, при которой на второй команде в модеме сбивается счетчик принятых байтов, например: С сервера выдаем подряд две разные команды с указанным интервалом, каждая длиной в 7 байт. На первую команду в запросе статуса поступает ответ +KTCPSTAT 3,-1,0,7 (в буфере модема имеются 7 принятых байтов), а на вторую команду изредка в статусе получается удвоенное количество байт: +KTCPSTAT 3,-1,0,14. Здесь каждый скажет, что это, мол, котнтроллер в этом случае не успел вычитать из модема первые 7 байт, как модем получил вторую команду и счетчик в модеме показывает сумму байт обеих команд. Но! После вычитывания из модема и второй команды иногда счетчик показывает, что в буфере модема по-прежнему имеются 7 принятых байтов и дальше, сколько бы ни пытались их вычитать, модем присылает только EOFpatten без байтов, а запрос статуса будет по-прежнему показывать наличие 7 байт. В том что обе команды вычитаны сомнения нет, поскольку сервер получает ответы на обе команды (команды разные и ответы разные). Глюк в стеке модема? Не сталкивался ли кто с такой ситуацией?
Сообщение отредактировал MVJ - Nov 27 2013, 11:26
|