Настройка сокета для HTTP

Помимо выделения памяти под буферы TX, RX и VAR, чтобы сокет работал в режиме HTTP, нужно сделать следующее:

  • Протокол должен быть TCP (sock.protocol = 1 - PL_SOCK_PROTOCOL_TCP).
  • Сокет должен принимать входящие соединения (обычно от любого узла: sock.inconmode = 3 - PL_SOCK_INCONMODE_ANY_IP_ANY_PORT).
  • Повторные подключения включать не нужно, для HTTP они только мешают (sock.reconmode = 0 - PL_SOCK_RECONMODE_0). По умолчанию они отключены, так что оставьте как есть.
  • Нужно задать правильный порт, который прослушивает HTTP. Стандартный HTTP-порт на всех серверах - 80 (sock.httpportlist = "80").

В предыдущем разделе мы объяснили, что в системе стоит зарезервировать несколько HTTP-сокетов. Пример возможной инициализации:

dim f as byte
...
'setup for other sockets, etc.
'setup sockets 8-15 for HTTP
for f=8 to 15
	sock.num=f
	sock.protocol= PL_SOCK_PROTOCOL_TCP
	sock.inconmode= PL_SOCK_INCONMODE_ANY_IP_ANY_PORT
	sock.httpportlist="80"
next f
....

Чтобы убедиться, что HTTP работает, создайте простой статический HTTP-файл и добавьте его в проект. Назовите файл index.html - это файл по умолчанию, который открывается, если GET или POST не запрашивают конкретный файл. Пример статического файла:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML//EN">
<HTML>
<BODY>
	HELLO WORLD!<br>
</BODY>
</HTML>

Запустите браузер, введите IP-адрес устройства (например, "http://192.168.1.95") - на экране появится надпись "HELLO WORLD!"

Внимание

Не забудьте назначить устройству IP-адрес. Например, при работе через обычный проводной Ethernet IP-адрес задаётся свойством net.ip.

Двойная нагрузка: обычная и HTTP-обработка на одном сокете

HTTP-сокеты не обязаны работать только с HTTP. Их поведение может зависеть от того, на какой прослушиваемый порт поступило TCP-соединение. Пример: настройку устройства нужно выполнять двумя способами - через TELNET или через HTTP. Стандартный порт TELNET - 23, стандартный порт HTTP - 80. Настройте сокет так:

sock.num=f
sock.protocol= PL_SOCK_PROTOCOL_TCP
sock.inconmode= PL_SOCK_INCONMODE_ANY_IP_ANY_PORT
sock.localportlist="23"
sock.httpportlist="80"
....

Теперь сокет будет принимать соединения и на порт 23, и на порт 80. При подключении к порту 23 сокет работает как обычный сокет данных, как описано в предыдущих разделах. При подключении к порту 80 сокет автоматически переключается в режим HTTP!

Свойство sock.httpmode показывает, в каком режиме находится сокет: в обычном режиме данных или в режиме HTTP. Любое TCP-соединение можно даже "принудительно" перевести в режим HTTP, задав sock.httpmode = 1 - YES. Вернуть такое соединение в режим данных нельзя: оно останется в режиме HTTP до завершения.

Исходный материал Tibbo обновлён 11 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке