Algol 0 6 марта, 2012 Опубликовано 6 марта, 2012 · Жалоба Доброго всем времени суток! Продолжая вникать в LwIP столкнулся с такой непоняткой для себя, как правильно организовать TCP клиента? Посмотрел пример TCP сервера на базе STM32F217 от ST. Если правильно понял, то клиент должен отличаться лишь отсутсвием команд listen и accept. Набросал такой алгоритм connn = netconn_new(NETCONN_TCP); netconn_connect(connn, &addr, 5001); // создание и заполнение буфера... ... while(1) { netconn_write(connn,buf1,LENGTH,NETCONN_NOCOPY); buf_rev = netconn_recv(connn); if (buf_rev != NULL) { // сервер отвечает } } коннект благополучно происходит, данные отправляются..но netconn_recv(connn); бесконечно ожидает приема данных от сервера. Хотя сниффером наблюдаю, как сервер шлет ACK пакеты, почему же их не перехватывает клиент? Я либо не умею готовить LwIP, либо не до конца понимаю принцип реализации клиента. Пожалуйста, подскажите как проверить факт получения сервером посылки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sagittarius 0 6 марта, 2012 Опубликовано 6 марта, 2012 · Жалоба netconn_recv(connn); бесконечно ожидает приема данных от сервера. Хотя сниффером наблюдаю, как сервер шлет ACK пакеты, почему же их не перехватывает клиент? на сколько понимаю оно ждет не аска а данных от сервера, аск до верхнего уровня не доходит, не нужен он там особо. Чтоб не ждать бесконечно можно покрутить дефайны и вываливаться по таймауту. Так же проще использовать интерфейс сокетов, вдруг какой другой стек прицепить надо будет. под STM32F217 есть пример клиента, но под https (PolarSSL), но можно запросто выкусить часть SSL (от открытия сокета до отправки запроса), просто послать запрос GET HTTP и получить страничку гугля или микрософта :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Algol 0 7 марта, 2012 Опубликовано 7 марта, 2012 · Жалоба Спасибо! Пример с SSL посмотрю. Установка таймаута не проблема в данном случае, это можно сделать с netconn_set_recvtimeout() Проблема именно в том, что АСК не доходит до верхнего уровня... Только что осенило...сама функция netconn_write возвращает значение типа err_t. Возможно обработка ACK спрятана уже внутри netconn_write. Мне просто нужно понять, как клиент узнает, что потеряна связь с сервером и нужно сделать реконнект... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться