|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
TCP и HTTP сервера на одном stm3219.02.2021, 19:45. Показов 4657. Ответов 18
Хочу сделать одновременно TCP и HTTP сервера на одном мк.
Использую LWIP RAW, stm32f746, PHY - LAN8742, без OS, код генерирую в CubeMX. Сейчас настроен TCP сервер на LWIP RAW. HTTP делал на NETCONN. На RAW сделать HTTP, я так понимаю, особо ничем не отличается от TCP, только добавить связку входящий запрос-ответ отправкой страницы/данных. Но интересует в целом возможность совместить TCP и HTTP на одном мк. Насколько я знаю, HTTP просит создавать соединение на 80м порту. Для TCP номер порта не важен. Пока не понятно как это можно организовать. Как-то пытаться делать несколько соединений на TCP, просто HTTP привязывать на 80й порт, или вообще параллельно создавать два соединения, параллельно их прослушивать и т.д. Тогда не понятно как настройки будут поделены между этими соединениями, как будет делиться память мк. Буду благодарен любой помощи и подсказкам.
0
|
|
| 19.02.2021, 19:45 | |
|
Ответы с готовыми решениями:
18
Нужна подсказка новичку разобраться с функциями работы HTTP (HTTPS) сервера, TCP сервера Помогите с реализацией TCP/IP сервера для stm32 Чем связать STM32 + STM32 в одном корпусе? |
| 19.02.2021, 23:24 | |
|
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 20.02.2021, 00:39 | ||
|
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||||||||||||
| 20.02.2021, 13:16 [ТС] | ||||||||||||||||
|
Humanoid, Voland_, Проблемы возникли вот в чем:
Вот, например, типичное создание нового TCP соединения:
tcp_bind(pcb, NULL, 80); Дальше я хочу получить следующее (в случае одновременного подключения TCP клиента и HTTP клиента, либо кого-то одного из них): - если поступает GET запрос, то отправляем ему ответ HTTP (т.е. страницу/данные) - если поступает какой-то TCP пакет, то принимаем его как обычный TCP, т.е. буфер данных и обрабатываем Вот очень большая функция приема TCP пакета: Кликните здесь для просмотра всего текста
Здесь я расчитывал, что просто принятый пакет будет проходить ряд условий, при которых он определится либо как GET запрос и будет сформирован ответ, а если нет, то просто примется как TCP пакет и пойдет по дальнейшему пути принятия TCP пакета Начиная с этого условия в этой части кода else if(es->state == ES_ACCEPTED)
Добавлено через 12 минут Но я еще так подозреваю, что данный TCP сервер при той реализации, что сделана сейчас, не поддерживает два и более одновременных подключения, возможно проблема в этом, т.к. HTTP же пытается тянуть страницу через несколько подключений сразу. Я, если честно, забыл уже как задать больше одного возможного подключения
0
|
||||||||||||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 20.02.2021, 13:38 | |||
|
Вот, есть раздумья некоего автора, который сам нашел ответ на свою проблему.
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 20.02.2021, 13:46 [ТС] | |
|
Voland_, Да не, это не сервер не мощный, это моя реализация сервера не поддверживает нормального подключения двух клиентов, я что-то упустил. Там stm32f746 пока особо ничем не нагруженный.
На netconn делал и TCP и HTTP, там все нормально было, все поддерживалось. Тут на RAW что-то упустил. А по поводу "зачем": ну тут скорее придать некой универсальности для программы, захотел подключился по TCP через какую-нибудь самодельную програмку, а захотел и подключился через браузер. Такая вот дополнительная хотелка). Ну, я так понимаю, что сейчас надо ликвидировать невозможность подключения нескольких клиентов одновременно, дальше пробовать HTTP подключать. Ну а сама моя идея реализации хоть правильная?
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 20.02.2021, 14:03 | |||
Для универсальности нужно просто поддержать http тогда и сделать это полноценно - в несколько потоков.
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 20.02.2021, 17:20 [ТС] | |
|
Voland_, HTPP это же по сути надстройка над TCP, т.е. соединение устанавливается, зактывается да и работает как TCP. А HTTP должен только обрабатывать полученные GET запросы. На имеющийся TCP сервер я добавил обработку GET запросов в функции принятия пакетов, а чем еще отличается релизация HTTP сервера от TCP я пока не знаю даже. Надо найти какой-нибудь рабочий пример и посмореть различия
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 20.02.2021, 20:58 | |||
|
1
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 25.02.2021, 07:38 [ТС] | |
|
Voland_, Да, согласен, переведу код под HTTP, так думаю проще будетв дальнейшем реализовывать. Да и вообще лучше отойду к общению с мк через браузер. Но пока есть одна пролема, я так понимаю тут в основном на вопросы по LWIP только Вы отвечаете), поэтому спрошу: сейчас TCP сервер создает только одно соединение, точне он и второе создает, при попытке соединиться со вторым клиентом (тройное рукопожатие проходит нормально), но как только второй клиент начинает слать данные, первый же пакет не доходит до мк, происходит множественные retransmission. При этом и первое соединение тоже перестает работать. Все настройки проверил, там вроде все нормально, колличество соединений TCP 10. В какую сторону копать?
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||||||
| 25.02.2021, 09:14 | ||||||||
|
DmitryDDDD, надо смотреть код. Просто инициализация всех соединений не происходит непосредственно в Init(). И, соответственно, при открытии 1го соединения, никто не открывает следующее. Это надо делать в бесконечном цикле (стейт-машины или idle-loop'а), который и будет
Добавлено через 4 минуты
1
|
||||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||||||||||||||
| 25.02.2021, 09:23 [ТС] | ||||||||||||||||||
|
Voland_, Вот основные части кода, все приводить не буду, чтобы не перегружать лишней информацией, если что-то надо будет привести дополнительно, напишите, скину)
1) Используемые функции
Ну да, получается инициализацию выполняю в main один раз
4)
Добавлено через 2 минуты Периодически пользуюсь этим сайтом, много информации полезной, но порой как-то не так подается информация, там и по HTT RAW есть уроки, но что-то выжать с них пока не получилось
0
|
||||||||||||||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||||||
| 25.02.2021, 09:35 | |||||||
1
|
|||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||
| 25.02.2021, 09:47 [ТС] | |||||||
|
Voland_,
Сейчас попробую еще это все на HTTP перевести. Я вот сначала делал на FreeRTOS и netconn, в целом проблем не возникало. Потом хотел перейти на noOS, т.е. RAW, но уже стал задумываться, а стоит ли оно того, может проще поставить OS да и крутить просто весь рабочий код мк в одной задаче, а LWIP пусть создается в другой, и крутится себе в потоках сам. Там просто другая проблема возникнет, где и сколко памяти выделить под ОС, еще кучу параметров перебирать и настраивать)
0
|
|||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 25.02.2021, 09:59 | |
|
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 26.02.2021, 08:00 [ТС] | |
|
Voland_, Можете дать такой более организационный совет: есть утройство на мк, которое по большей части выпоняет свои определенные функции и процессы, но для управления его работой (передачи управляющих сигналов на мк, данных настройки и т.д.), а так же для передачи ряда параметров с датчиков и сигналов от мк к пк я приделаю туда обмен данными по TCP, ну или с большей вероятнростью HTTP. Так вот стоит выбор: RAW, NETCONN или SOCKET. С Raw все поняно, тут зависит от реализации с FreeRTOS или без ОС. Вот быбор между NETCONN и SOCKET не совсем очевиден, что предпочтительнее использовать? Ну и по FreeRTOS так же, разные мнения относительно ОС, кто-то старается избегать использование ОС, а кто-то считает, что ОС гораздо упрощает и улучшает работу программы
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 26.02.2021, 10:09 | ||
|
DmitryDDDD, тут я не советчик. У каждого свой подход ). Для устройств с полным циклом разработки и поддержки (то есть разработка, тестирование, тех.документация и пр.) имеет смысл использовать модульный подход и готовые open-source решения. В случае отсутствия чего-то удобного под проект, либо когда проект просто обязан быть уникальным - придется городить свой огород, протокол, и все к нему.
То же самое касается и RTOS. Если Вы комфортно себя ощущаете без ОСи, и другие компоненты могут его не использовать - так и стройте алгоритм. На мой взгляд программы без ОСи заранее предсказуемы, потому что в них хоть и есть прерывания, но это все, о чем надо думать. С другой стороны - наличие ОСи позволяет думать "шире", и не строить стейт-машины абсолютно везде. Тут уж, как вам удобнее ).
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
| 01.03.2021, 09:49 [ТС] | |||||||||||
|
Voland_, А Вы не использовали RAW HTTP? Сколько примеров нашел, там везде по-сути все делается одной строчкой
0
|
|||||||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 01.03.2021, 10:24 | |
|
0
|
|
| 01.03.2021, 10:24 | |
|
Помогаю со студенческими работами здесь
19
Подскажите самый простой пример TCP клиента и TCP сервера Не приходит ответ на TCP клиент андроид с TCP сервера Qt Modbus TCP STM32 TCP сервер stm32 аудио сигнал через TCP-IP на STM32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|