On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





ссылка на сообщение  Отправлено: 30.09.15 17:29. Заголовок: Как правильно отключить клиента от 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>


+79161734005 Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


постоянный участник




ссылка на сообщение  Отправлено: 06.10.15 09:40. Заголовок: А не надо отключать,..


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

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 06.10.15 20:21. Заголовок: А таймаут? Если не п..


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

+79161734005 Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 29
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет