реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Algol
сообщение Mar 6 2012, 17:35
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 140
Регистрация: 7-04-05
Из: Россия, Владимир
Пользователь №: 3 941



Доброго всем времени суток!
Продолжая вникать в 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, либо не до конца понимаю принцип реализации клиента. Пожалуйста, подскажите как проверить факт получения сервером посылки?
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Mar 6 2012, 20:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(Algol @ Mar 6 2012, 20:35) *
netconn_recv(connn); бесконечно ожидает приема данных от сервера.
Хотя сниффером наблюдаю, как сервер шлет ACK пакеты, почему же их не перехватывает клиент?

на сколько понимаю оно ждет не аска а данных от сервера, аск до верхнего уровня не доходит, не нужен он там особо. Чтоб не ждать бесконечно можно покрутить дефайны и вываливаться по таймауту. Так же проще использовать интерфейс сокетов, вдруг какой другой стек прицепить надо будет.
под STM32F217 есть пример клиента, но под https (PolarSSL), но можно запросто выкусить часть SSL (от открытия сокета до отправки запроса), просто послать запрос GET HTTP и получить страничку гугля или микрософта :-)
Go to the top of the page
 
+Quote Post
Algol
сообщение Mar 7 2012, 05:18
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 140
Регистрация: 7-04-05
Из: Россия, Владимир
Пользователь №: 3 941



Спасибо! Пример с SSL посмотрю.
Установка таймаута не проблема в данном случае, это можно сделать с netconn_set_recvtimeout()
Проблема именно в том, что АСК не доходит до верхнего уровня...

Только что осенило...сама функция netconn_write возвращает значение типа err_t. Возможно обработка ACK спрятана уже внутри netconn_write.
Мне просто нужно понять, как клиент узнает, что потеряна связь с сервером и нужно сделать реконнект...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 07:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.0278 секунд с 7
ELECTRONIX ©2004-2016