Сокеты ActionScript 3.0 не могут повторно подключиться

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

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

Чтобы прояснить и / или резюмировать:

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

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

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

Должно быть, мне не хватает чего-то очень простого.

Любые идеи?

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


Да, он работает должным образом, если соединение установлено (даже если соединение разрывается позже).

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

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

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

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


person aib    schedule 12.08.2008    source источник
comment
Правильно ли устанавливается соединение, если сервер доступен? Вы получаете какие-либо сообщения об ошибках, если он не работает после трех раз? Я много работал с Sockets и никогда не сталкивался с этой проблемой.   -  person Matt MacLean    schedule 14.08.2008


Ответы (1)


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

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

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

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

person Ates Goral    schedule 15.10.2008
comment
Спасибо, я так и не нашел базу данных об ошибках Adobe. Раньше их можно было отправить много ... - person aib; 16.10.2008