Форум » » C# и Websocket. Нужна помощь. » Ответить

C# и Websocket. Нужна помощь.

Paul_T: В C# пока полный 0, но изучать надо... Решил написать модуль для управления LG телевизора, работающий на Webos. Коммуникация ТВ осуществляется по Websocket на порт 3000. В библиотеках SIMPL# есть класс WebSocketClient, но мне показалось он несколько скуднее на методы, чем такой-же клас в библиотеках .NET. Ну да ладно, как я понимаю, сторонние библиотеки не прокатят и нужно пользоваться только теми, что описаны в SIMPL# (ну, кроме System, видимо). Написал клиентскую часть, соединение с сервером, получение клиентского ключа, сохранение ключа в файле, реализовал несколько команд управления. Работает! громкостью управляет, это уже хорошо, можно развивать дальше, но оказалось все не так просто. После простоя в минуту-две (отсутствие посылок клиент-сервер) сервер перестает отвечать на запросы, при этом метот Send(...) возвращает код WEBSOCKET_CLIENT_SUCCESS. Помогает только переподключение, т.е. нужно разорвать соединение и подключиться заново. За основу своего модуля брал простейший модуль написанный на JS, все сообщения соответствуют этому модулю. JS модуль работает в браузере без ограничения времени, поэтому предположу, что проблема не на стороне телеыизора. Но как ее найти, не понимаю... Может нужно делать асинхронное соединение? Но как это сделать методами SIMPL# так пока и не понял. Может кто сталкивался? Спасибо за любую помощь! PS. Еще заметил, что метод Read() выполняется бесконечно долго при отсутствии ответа от сервера. Может он имеет какие либо таймауты? Но я этого не нашел.

Ответов - 63, стр: 1 2 3 4 All

Paul_T: DmitriiP пишет: а проверить receivedata на null что мешает :)??? Да, собственно ничего не мешает, так и сделал. Сейчас проблема самоустранилась и все стабильно работает уже несколько дней, без исключений и receivedata равной null. Остался только вопрос, откуда там взялся null и, почему это произошло. Но, думаю, мы это не узнаем. Видимо какие-то внутренние процессы забывали ссылку на массив byte[]. Тут даже проблема не в обработке исключений или проверке на null, а в том, что просто в определенный момент переставал работать метод receive, отдавая reveivedata=null. Совсем... и дальнейшая работа над модулем переставала иметь смысл )))

DmitriiP: Paul_T пишет: Тут даже проблема не в обработке исключений или проверке на null, а в том, что просто в определенный момент переставал работать метод receive Проблемма как раз именно в том что вы не обрабатываете исключения. null может приходить по разным причинам. но вы же не проверяете что :) if(receive_result == WebSocketClient.WEBSOCKET_RESULT_CODES.WEBSOCKET_CLIENT_SUCCESS) может быть другой статус "не зависящий от вашего кода", у которого по факту нету тела (оно null а не byte[] как при WEBSOCKET_CLIENT_SUCCESS) Перестваал работать он из за того что контроллер ловил системную ошибку и "вешал эту функцию". try/catch не прочто так придумали....

Paul_T: DmitriiP пишет: Статус, как раз возвращался WEBSOCKET_CLIENT_SUCCESS, это и смутило... Ваша мысль ясна, буду знать. Пока только отладкой занимаюсь и все статусы и полученные данные пишу в консоль для контроля, видел, что receive выполняется с положительным результатом, однако, да, можно проверять полученные данные на их наличие. Обработку исключений допишу, конечно же ))) Кстати, в модуле к Denon Heos с апликейшн маркета, тоже исключения не все обработаны )




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