Используем TCP_server для коммуникации со сторонним оборудованием.
Стороннее оборудование присылает на контроллер http get запрос управляющий включением/выключением света типа:
http://192.168.97.1:50002/?id=$0620$&action=*on*
Требуется выдавать ответ со статусом операции. Соответственно формируем в ответ html страничку содержащую слово off или on
Проблема:
Если ответ не выдавать то команды можно присылать сколь угодно раз (но нам нужен fb)
Если ответ выдавать не не все браузеры корректно его воспринимают, а именно на некоторых типа firefox происходит ситуация при которой уже вторая команда не проходит, т.к. браузер пытается открыть новое соединение не финализировав первое. А т.к. TCP_server позволяет держать только одно клиентское соединение, то контроллер дает отказ в соединении.
Пробовали в ответе поле Connection: close вроде клиент закрывает соединение но видимо как то не до конца, и все равно не работает.
Пробовали SocketServerStopListen из модуля после отправки ответа, но при этом браузер не освобождает соединение, а мы лишь перестаем принимать команды и при повторном открытии SocketServerStartListen порт опять занят.
Подскажите как силами crestron правильно освободить порт или может в http что то добавить. Пока возвращаем кроме самой страницы с ответом еще заголовки HTTP/1.1 200 OK, Content-Type: text/html и Content-Length: с расчетной длинной страницы (без этого вообще не отображает ответ)
В общем случае заголовок ответа (ответ от Apache сервера) примерно выглядит так при ответе от WEB сервера:
HTTP/1.1 200 OK
Date: Tue, 22 Sep 2015 12:52:22 GMT
Server: Apache/2.4.16 (Win64) OpenSSL/1.0.1p
Last-Modified: Tue, 22 Sep 2015 10:39:53 GMT
ETag: "62-520539e49e230"
Accept-Ranges: bytes
Content-Length: 98
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
далее сама страничка с ответом
<!DOCTYPE html><HTML><HEAD><TITLE>relay status</TITLE></HEAD><BODY>off</BODY></HTML>