Форум » » Как правильно отключить клиента от TCP сервера » Ответить

Как правильно отключить клиента от TCP сервера

Вячеслав: Используем 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>

Ответов - 2

Игорь K.: А не надо отключать, он сам разорвет сеанс, если нет обмена.

Вячеслав: А таймаут? Если не посылать Connection:close браузер вообще по умолчанию Keep-Alive пуляет, чтоб соединение поддерживать. И пока браузер полностью не закрыть, соединение не высвобождает. P/S отлаживаем просто браузером (эмулируя запросы от DigitalSignage панели, которая только web запрос и может прислать) C гугл хром проблем нет, есть проблемы с Firefox, Яндекс браузером. Но сам факт наличия говорит о непроработанном решении. Вот и хотелось понять есть ли инструмент для железобетонного отбоя клиент не зависимо от платформы его происхождения. (перезагруз crestron не предлагать ясно дело)



полная версия страницы