Урок 93
Часть 2
LAN. W5500. HTTP Server. Сокеты
В предыдущей части урока мы познакомились с понятием сокетов, а также внесли определённые поправки в код для работы с ними.
В функции http_request изменим немного вывод в USART имени файла, добавив туда также и номер сокета
strcpy(httpsockprop[sn].fname,tmpbuf);
}
sprintf(str1,"S%d %srn",sn, httpsockprop[sn].fname);
HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000);
f_close(&httpsockprop[sn].MyFile);
Здесь также отобразим номер сокета
sprintf(str1,"S%d f_open: %drn",sn,result);
HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000);
sprintf(str1,"S%d f_size: %lurn",sn,MyFile[sn].fsize);
HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000);
И здесь
sprintf(str1,"S%d data size:%lu; cnt data part:%u; last_data_part_size:%urn",sn,
(unsigned long)httpsockprop[sn].data_size, httpsockprop[sn].cnt_rem_data_part, httpsockprop[sn].last_data_part_size);
А здесь мы подтвердим в терминальной программе закрытие сокета в случае передачи однобуферной страницы. Отобразим немного по-другому, чтобы отличалось
DisconnectSocket(sn); //Разъединяемся
SocketClosedWait(sn);
sprintf(str1,"S%d (one) closedrn",sn);
HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000);
В функции tcp_send_http_one в теле условия в случае передачи страницы с ошибкой отобразим данную информацию с номером сокета
else
{
sprintf(str1,"S%d file not foundrn",sn);
HAL_UART_Transmit(&huart2,(uint8_t*)str1,strlen(str1),0x1000);
header_len = strlen(error_header);
Соберём код, прошьём контроллер и попробуем запросить какой-нибудь документ потяжелее. Я добавил также фон на страницу в виде повторяющейся картинки с помощью стиля оформления
<body style="background-image:url(IMG/img01.jpg)">
Мы должны получить такой результат в браузерах
Мы видим, что всё отображается. А почему в браузерах, а потому что теперь мы можем запрашивать страницы с нашего мини-сервере в любом сервере, мы же теперь не боимся, что браузер захочет открыть несколько соединений.
Вот результат в браузере Google Crome
Попробуем открыть вот такой файл с несколькими рисунками
<html><body>
<html><body><h1 style="text-align: center;">STM32F103x8<br><br>WEB Server</h1>
<p>
<img src="/IMG/img04.jpg" />
<img src="/IMG/img05.jpg" />
<img src="/IMG/img06.jpg" />
<img src="/IMG/img07.jpg" />
<img src="/IMG/img08.jpg" />
<img src="/IMG/img09.jpg" />
<img src="/IMG/img10.jpg" />
<img src="/IMG/img11.jpg" />
<img src="/IMG/img12.jpg" />
<img src="/IMG/img13.jpg" />
</p>
</body></html>
Откроем его в браузере Google Chrome
Посмотрим, как переключаются сокеты в терминальной программе
f_mount: 0
First Status Sn2: 0x14
First Status Sn3: 0x14
First Status Sn4: 0x14
First Status Sn5: 0x14
First Status Sn6: 0x14
First Status Sn7: 0x14
S2 len buf:0x0200
S2 index8.htm
S2 f_open: 0
S2 f_size: 425
S2 data size:469; cnt data part:1; last_data_part_size:469
f_lseek: 0
S2 (one) closed
S2 len buf:0x01D1
S2 IMG/img04.jpg
S2 f_open: 0
S2 f_size: 20262
S2 data size:20306; cnt data part:10; last_data_part_size:1874
S3 len buf:0x01D1
S3 IMG/img05.jpg
S3 f_open: 0
S3 f_size: 20335
S3 data size:20379; cnt data part:10; last_data_part_size:1947
S4 len buf:0x01D1
S4 IMG/img06.jpg
S4 f_open: 0
S4 f_size: 20109
S4 data size:20153; cnt data part:10; last_data_part_size:1721
S5 len buf:0x01D1
S5 IMG/img07.jpg
S5 f_open: 0
S5 f_size: 20412
S5 data size:20456; cnt data part:10; last_data_part_size:2024
S6 len buf:0x01D1
S6 IMG/img08.jpg
S6 f_open: 0
S6 f_size: 20461
S6 data size:20505; cnt data part:11; last_data_part_size:25
S7 len buf:0x01D1
S7 IMG/img09.jpg
S7 f_open: 0
S7 f_size: 20283
S7 data size:20327; cnt data part:10; last_data_part_size:1895
S2 closed
S3 closed
S4 closed
S5 closed
S7 closed
S2 len buf:0x01D1
S2 IMG/img11.jpg
S2 f_open: 0
S2 f_size: 19508
S2 data size:19552; cnt data part:10; last_data_part_size:1120
S3 len buf:0x01D1
S3 IMG/img13.jpg
S3 f_open: 0
S3 f_size: 19577
S3 data size:19621; cnt data part:10; last_data_part_size:1189
S4 len buf:0x01D1
S4 IMG/img10.jpg
S4 f_open: 0
S4 f_size: 20340
S4 data size:20384; cnt data part:10; last_data_part_size:1952
S6 closed
S2 closed
S3 closed
S4 closed
S2 len buf:0x01D1
S2 IMG/img12.jpg
S2 f_open: 0
S2 f_size: 19580
S2 data size:19624; cnt data part:10; last_data_part_size:1192
S2 closed
Мы видим, что в работе участвуют все 6 сокетов. Отлично! Значит всё правильно.
Спасибо всем за внимание!
Предыдущая часть Программирование МК STM32 Следующий урок
Отладочную плату можно приобрести здесь Nucleo STM32F401RE
Ethernet LAN Сетевой Модуль можно купить здесь W5500 Ethernet LAN
Переходник USB to TTL можно приобрести здесь ftdi ft232rl
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Добавить комментарий