Вопрос

У меня возникли проблемы с подключением (через классы Socket и XMLSocket) к прослушивателю TCP после истечения времени ожидания соединения.

У меня есть флеш-апплет, которому необходимо поддерживать TCP-соединение с сервером.Я реализовал тайм-ауты, используя таймеры, систему пинг-понга и т. д.Однако есть проблема.При вызове Socket.connect() флеш-плеер (9.0.115 и многие другие стабильные версии до этого) отправляет 3 запроса на соединение в виде пакетов SYN с некоторым интервалом между ними.Если ни на один из них не ответили (например,поскольку сервер не работает), я не могу заставить апплет [попытаться] подключиться к серверу.Всегда.То есть в течение срока службы апплета.

Чтобы уточнить и/или подвести итог:

Для любой пары хост/порт, заданной для Socket.connect() или XMLSocket.connect(), в случае сбоя вызова любые последующие вызовы connect() к любым другим экземплярам Socket (или XMLSocket) в течение срока службы Flash-апплета к одной и той же паре хост/порт игнорируются.(По крайней мере, насколько я могу судить с помощью анализатора пакетов.)

Я пробовал вызывать множество методов Socket, уничтожать¹ и воссоздавать объекты, используя пул Socket и различные другие методы, которые сейчас не могу вспомнить;все безрезультатно.

Мое текущее решение — уведомить родительскую веб-страницу с помощью вызова JavaScript и позволить ей перезагрузить мой апплет.Это некрасивое решение, и я не собираюсь предлагать обходные пути для проблем. это причины только потому, что Flash не может правильно обрабатывать соединения сокетов.

Должно быть, я упускаю что-то очень простое.

Есть идеи?

1:Я знаю, что вы не можете разрушать объекты;Я просто удаляю все ссылки на них и надеюсь на лучшее.В этом случае я не пытался явно вызывать GC.(Хотя я думаю, что попробовал поместить сокет в массив и использовать удалить.)


Да, это работает так, как ожидалось, если соединение установлено успешно (даже если соединение позже разорвется).

Единственное событие, вызывающее это, — это случай, когда сервер вообще не отвечает;это как если бы Flash помечал комбинацию хост/порт как «автономную» и не отправлял на нее больше пакетов в течение всего срока службы апплета.

Я подозреваю активный отказ от соединения (напр.хост подключен к сети, но не прослушивает порт) не вызывает этого.

Я не получаю никаких сообщений об ошибках или каких-либо отзывов от Socket.

Вы когда-нибудь вызывали функцию Connect() более одного раза для одной и той же пары хост/порт, когда первый из них не сработал?Как вы узнали, что первое соединение() не удалось?И перед последующими вызовами метода Connect() вы делали что-нибудь для сброса сокета?

Это было полезно?

Решение

Это может быть связано с неразрешенной ошибкой ФП-269 что, в свою очередь, может иметь ту же первопричину, что и ФП-67.

Эта сборка должна быть исправлена ​​в текущем публичном бета -выпуске, найденном на labs.adobe.com

Эдвин Вонг - [23.09.08 16:49 ]

Я бы порекомендовал вам дать последняя публичная бета-версия выстрел...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top