У меня проблемы с подключением (через классы Socket и XMLSocket) к прослушивателю TCP после тайм-аута подключения.
У меня есть флеш-апплет, которому необходимо поддерживать TCP-соединение с сервером. Я реализовал тайм-ауты с помощью таймеров, системы пинг-понга и т. д. Однако есть проблема. После вызова Socket.connect () флэш-плеер (9.0.115 и многие другие до этого) отправляет 3 запроса на соединение посредством пакетов SYN с некоторым промежутком времени между ними. Если ни один из них не получил ответа (например, из-за того, что сервер не работает), я не могу заставить апплет [попытаться] подключиться к серверу. Всегда. То есть в течение срока службы апплета.
Чтобы прояснить и / или резюмировать:
Для любой пары хост / порт, заданной Socket.connect () или XMLSocket.connect (), в случае сбоя вызова любые последующие вызовы connect () к любым другим экземплярам Socket (или XMLSocket) в течение срока службы Flash-апплета к той же паре хост / порт игнорируются. . (По крайней мере, насколько я могу судить, используя анализатор пакетов.)
Я пробовал вызывать множество методов Socket, уничтожать и воссоздавать объекты, используя пул Socket и различные другие методы, которые я сейчас не могу вспомнить; все без толку.
Мое текущее решение - уведомить родительскую веб-страницу с помощью вызова JavaScript и позволить ей перезагрузить мой апплет. Это нехорошее решение, и я не собираюсь применять обходные пути для проблем, вызываемых Это, просто потому, что Flash не может должным образом обрабатывать соединения с сокетами.
Должно быть, мне не хватает чего-то очень простого.
Есть идеи?
1: Я знаю, что вы действительно не можете уничтожать объекты; Я просто удаляю все ссылки на них и надеюсь на лучшее. Я не пробовал явно вызывать сборщик мусора в этом случае. (Хотя я думаю, что пытался поместить сокет в массив и использовать Удалить.)
Да, он работает должным образом, если соединение установлено (даже если соединение разрывается позже).
Единственное событие, вызывающее это, - это случай, когда сервер вообще не отвечает; это как если бы Flash помечает комбинацию хост / порт как "автономную" и не беспокоит посылку дополнительных пакетов на время существования апплета.
Я подозреваю, что активный отказ в соединении (например, хост находится в сети, но не слушает порт) этого не вызывает.
Я не получаю сообщений об ошибках или других отзывов от Socket.
Вы когда-нибудь вызывали connect () более одного раза к одной и той же паре хост / порт, когда первая выходила из строя? Как вы узнали, что первый connect () не удался? А перед последующими вызовами connect () вы что-нибудь делали для сброса сокета?
![[UX] Категории и настройки внешнего вида Flash-сообщений](https://i.imgur.com/5LZljB8b.jpeg)
Это может быть связано с нерешенной ошибкой FP-269, которая, в свою очередь, может иметь ту же основную причину, что и FP-67.
This build should be fixed in the current public beta release found on labs.adobe.com
Edwin Wong - [09/23/08 04:49 PM ]
Я бы порекомендовал вам попробовать последняя публичная бета ...
Спасибо, я так и не нашел базу данных об ошибках Adobe. Раньше их можно было отправить много ...
Правильно ли устанавливается соединение, если сервер доступен? Вы получаете какие-либо сообщения об ошибках, если он не работает после трех раз? Я много работал с Sockets и никогда не сталкивался с этой проблемой.