Перейти к содержанию
    

LwIP NetConn

Доброго всем времени суток!

Продолжая вникать в 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, либо не до конца понимаю принцип реализации клиента. Пожалуйста, подскажите как проверить факт получения сервером посылки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

netconn_recv(connn); бесконечно ожидает приема данных от сервера.

Хотя сниффером наблюдаю, как сервер шлет ACK пакеты, почему же их не перехватывает клиент?

на сколько понимаю оно ждет не аска а данных от сервера, аск до верхнего уровня не доходит, не нужен он там особо. Чтоб не ждать бесконечно можно покрутить дефайны и вываливаться по таймауту. Так же проще использовать интерфейс сокетов, вдруг какой другой стек прицепить надо будет.

под STM32F217 есть пример клиента, но под https (PolarSSL), но можно запросто выкусить часть SSL (от открытия сокета до отправки запроса), просто послать запрос GET HTTP и получить страничку гугля или микрософта :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Пример с SSL посмотрю.

Установка таймаута не проблема в данном случае, это можно сделать с netconn_set_recvtimeout()

Проблема именно в том, что АСК не доходит до верхнего уровня...

 

Только что осенило...сама функция netconn_write возвращает значение типа err_t. Возможно обработка ACK спрятана уже внутри netconn_write.

Мне просто нужно понять, как клиент узнает, что потеряна связь с сервером и нужно сделать реконнект...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...