Сокеты 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 () вы что-нибудь делали для сброса сокета?

12.08.2008 15:03:40
Правильно ли установлено соединение, если сервер доступен? Когда после 3-х раз происходит сбой, вы получаете какие-либо сообщения об ошибках? Я проделал большую работу с сокетами и никогда не сталкивался с этой проблемой.
Matt MacLean 14.08.2008 15:19:35
1 ОТВЕТ
РЕШЕНИЕ

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

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

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

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

3
15.10.2008 18:51:14
Спасибо, я никогда не находил базу данных ошибок Adobe. Может быть представлено много из них, в прошлом ...
aib 15.10.2008 23:26:15