Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LwIP NetConn
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Algol
Доброго всем времени суток!
Продолжая вникать в 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
Цитата(Algol @ Mar 6 2012, 20:35) *
netconn_recv(connn); бесконечно ожидает приема данных от сервера.
Хотя сниффером наблюдаю, как сервер шлет ACK пакеты, почему же их не перехватывает клиент?

на сколько понимаю оно ждет не аска а данных от сервера, аск до верхнего уровня не доходит, не нужен он там особо. Чтоб не ждать бесконечно можно покрутить дефайны и вываливаться по таймауту. Так же проще использовать интерфейс сокетов, вдруг какой другой стек прицепить надо будет.
под STM32F217 есть пример клиента, но под https (PolarSSL), но можно запросто выкусить часть SSL (от открытия сокета до отправки запроса), просто послать запрос GET HTTP и получить страничку гугля или микрософта :-)
Algol
Спасибо! Пример с SSL посмотрю.
Установка таймаута не проблема в данном случае, это можно сделать с netconn_set_recvtimeout()
Проблема именно в том, что АСК не доходит до верхнего уровня...

Только что осенило...сама функция netconn_write возвращает значение типа err_t. Возможно обработка ACK спрятана уже внутри netconn_write.
Мне просто нужно понять, как клиент узнает, что потеряна связь с сервером и нужно сделать реконнект...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.