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

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

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

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

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

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

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

Я должен упустить что-то очень простое.

Есть идеи?

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


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

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

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам