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

Сервер http на связке esp8266+stm32 (ответ на запрос GET и прочие неприятности)

Всех приветствую!

Использую связку ESP8266+STM32 (8266 используется в режиме AT команд, прошивка по дефолту, никаких сторонних библиотек и пр. )
Железяка подключена к сети на адресе 192.168.0.108 (на 8266 поднят клиент и сервер), комп с которого тестирую 192.168.0.103.
На запрос по адресу http://192.168.0.108 железка (STM32) отвечает всегда, но вот браузер висит и иногда разрождается вот этим:

48034105_2021-09-27_162825_.thumb.png.cd355b33021f42930f35b65a1252ba9e.png

Прослушиваю сеть, ответ на GET поступает всегда (скрин с Wirashark)

- синим выделен ответ сервера

1504950392_2021-09-27_163055_.thumb.png.16b6f6ad8630a9513f640700af53d764.png

Ответ соответствует вот этому коду (как файл htm он отображается нормально):

 

<html>
    <head>
        <title>TEST HTML</title>
    </head>
    <body>
        <h1>Тест HTML</h1>
        <p>Простой тест ответа</p>
    </body>
</html>

Что не хватает в ответе , чтобы браузер воспринимал ответ регулярно?
практически он всегда висит в каком-то ожидании и теряет страницу, хотя по F5 на его запрос ответ высылается всегда

Т.е. после набора в строке браузера http://192.168.0.108 браузер выдает запрос GET (есть в файле опроса сети *pcapng),
STM32 получает этот GET (стабильно всегда), парсит и отвечает (см. картину выше и файл)
в результате на ПК (192.168.0.103 откуда запущен браузер) эти ответы проходят (всегда)
но браузер не отображает ответ (страничку теста) и "крутится" в ожидании (чего ему надо не знаю)

перезапрашивая по F5 (фактически повторяя запрос страницы) все повторяется (т.е. запросы и ответы проходят) и...
в какой-то момент времени (после N-го нажатия F5) страница отображается, но следующие запросы опять не проходят (браузер висит - крутится значок ожидания)

Прошу пнуть в нужном направлении!

- думается, что помог бы файл с захватом обмена между простым сервером (своей железки) и браузером в Wirashark, как выложил ниже


ps
- браузеры разные ведут себя одинаково (хром, яндекс, макстон)

Прикладываю файлы скринов и сохраненный захват в Wirashark, в нем можно просмотреть весь обмен в сети

192.168.0.108_to_192.168.0.103.zip

 

 

Полный ответ сервера выглядит так:

HTTP/1.1 200 OK\r\n
  Server: httpd\r\n
  Content-Type: text/html\r\n
  Connection: close\r\n
  Refresh: 1\r\n
  Content-Length: ххх
\r\n\r\n    
<!DOCTYPE html>\r\n
<html>\n
	<head><title>TEST HTML</title></head>\n
    <body>\n
    	<h1>Тест HTML</h1>\n
    	<p>Простой тест ответа сервера</p>
    </body>\n
</html>    

где ххх длина в байтах все что ниже текстом

Изменено пользователем _dark_

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


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

Content-Length: ххх   - точно правильный , длинна только текста, без первых \r\n\r\n ?

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


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

 

31 minutes ago, Andreas1 said:

Content-Length: ххх   - точно правильный , длинна только текста, без первых \r\n\r\n ?

Ага, точно накосячил (внес недавно их в массив тела ответа), перепроверю....

 

 

 

Изменено пользователем _dark_

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


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

1 час назад, _dark_ сказал:

(на 8266 поднят клиент и сервер)

Это действительно работает? Проверили? Одновременно работает и то и другое?

Просто насколько помню - ESP8266 умел работать только или как клиент или как сервер, но не одновременно.

Хотя - может на новых прошивках уже не так.... Версию своей прошивки Вы не указали.

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


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

Andreas1

Fndreas1, спасибо за пинок, да, дело было в длине! 

зы

не понял как тут плюсануть ...

19 hours ago, jcxz said:

Это действительно работает? Проверили? Одновременно работает и то и другое?

Да, работает.

Как клиент подключается к офисной сети с IP 192.168.0.108,

2021-09-29_131608.thumb.png.bce6bbd95627c6fd68d6379d38f78690.png

как сервер создает свою (IP 192.168.4.1)

2021-09-29_131621.thumb.png.5fd7bf8129e6eccfb74d97ae6e7749e3.png

оба адреса отвечают одинаково.

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


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

8 минут назад, _dark_ сказал:

Да, работает.

Как клиент подключается к офисной сети с IP 192.168.0.108,

оба адреса отвечают одинаково.

Вы не поняли моего вопроса....

Я спрашивал про одновременную работу 2-х разных соединений, открытых - один в режиме сервера, другой - в режиме клиента. "Одновременная" - это значит 2-е открывается при незакрытом 1-м.

То, на что Вы ссылаетесь - это протокол HTTP, который обычно устанавливает соединение только на время передачи одного файла, и закрывает его сразу после окончания передачи (за исключением опционального режима keep-alive).

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


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

1 час назад, jcxz сказал:

Я спрашивал про одновременную работу 2-х разных соединений

А так вообще можно? Если с IP из разных подсетей, то это уже, как мост получается, или имелось ввиду с одним IP?

1 час назад, _dark_ сказал:

Как клиент подключается к офисной сети с IP 192.168.0.108,

 

1 час назад, _dark_ сказал:

как сервер создает свою (IP 192.168.4.1)

И как он у вас одновременно в разных подсетях работает? Роутеру пофиг на это, или он сам у вас , как точка доступа?

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


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

52 минуты назад, mantech сказал:

А так вообще можно? Если с IP из разных подсетей, то это уже, как мост получается, или имелось ввиду с одним IP?

А почему нельзя? (не применительно к ESP8266, а вообще)  Не понял - причём тут разные подсети?

Цитата

И как он у вас одновременно в разных подсетях работает? Роутеру пофиг на это, или он сам у вас , как точка доступа?

Имхо - Вы смешиваете режим подключения к WiFi (AT+CWMODE) и работу TCP-стека. Клиент/сервер - это про TCP-стек. В каком режиме подключен ESP к WiFi (AT+CWMODE) - без разницы.

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


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

esp8266 может одновременно рабоать и как точка доступа, и как клиент wifi, с разными ip на разных интерфейсах.

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


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

jcxz 

8266 работает в обоих режимах клиент-сервер (запускается командой "AT+CWMODE=3\r\n"), естественно в разных сетях.

Т.е. он одновременно подключен к роутеру с IP 192.168.0.108 как станция и поднимает сеть с IP 192.168.4.1 как точка доступа.

То, что я одновременно не могу подключится к обоим сетям не проблема 8266, просто на компе у меня 1 адаптер WiFi (поэтому см. попеременно), но могу с др. компа подключиться к 8266,

например с мобильника...

Впрочем rkit уже тоже подтвердил...

 

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


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

22 минуты назад, _dark_ сказал:

8266 работает в обоих режимах клиент-сервер (запускается командой "AT+CWMODE=3\r\n"), естественно в разных сетях.

Т.е. он одновременно подключен к роутеру с IP 192.168.0.108 как станция и поднимает сеть с IP 192.168.4.1 как точка доступа.

Что-то вы никак не поймёте...  :scratch_one-s_head: Мой вопрос внимательнее прочитайте! И мой ответ mantech.

Я не спрашиваю о режиме подключения к WiFi. Вопрос мой - о возможности открытия одновременно двух TCP-соединений в разных режимах. В режиме сервера и в режиме клиента.

TCP-соединение - это то, что в ESP8266 устанавливается командой AT+CIPSTART. Уже после того как он подключен к WiFi.

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


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

Естественно есть тонкое место это сам stm32, т.к. у него один канал с 8266 и отдает он ответ на "текущий запрос". 

Если один запрос перебьет другой (из разных сетей), то один будет потерян.

Но в ручном режиме запросов с двух устройств, это пока не заметно.

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


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

6 минут назад, _dark_ сказал:

Если один запрос перебьет другой (из разных сетей), то один будет потерян.

Ничего не понял.... :wacko2:

кто кого "перебьёт" и почему?

 

PS: Я это к тому, что помню в документации ESP8266 находил упоминание о невозможности создания TCP-соединений в разных режимах - пассивном (сервер) и активном (клиент).

А из вашего первого поста я понял, что у вас как раз одновременно: и TCP-клиентские сокеты и TCP-серверные.

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


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

4 minutes ago, jcxz said:

ESP8266 устанавливается командой AT+CWJAP

Так это команда подключения только как станция (AT+CWJAP – Connect to AP).

Точку доступа 8266 поднимает автоматически, если ее режим включен (по дефолту на IP ....4.1). 

Одновременно с работой в режиме станции, т.е. точка доступа включается быстрее и автоматически (по моему), а станция пока подключится сек. 5 пройдет

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


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

3 минуты назад, _dark_ сказал:

Так это команда подключения только как станция (AT+CWJAP – Connect to AP).

Сорри - перепутал. Я говорил о команде AT+CIPSTART конечно же.

 

3 минуты назад, _dark_ сказал:

Точку доступа 8266 поднимает автоматически,

Да опять 25.... Вы мои вопросы читаете???

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


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

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

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

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

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

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

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

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

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

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