Настройка сокета для 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 до завершения.