Jump to content

    
Sign in to follow this  
Algol

LwIP NetConn

Recommended Posts

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

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

Share this post


Link to post
Share on other sites
netconn_recv(connn); бесконечно ожидает приема данных от сервера.

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this