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