Сокет ActionScript в Android
У меня есть клиентское приложение Flash, написанное на ActionScript, которое использует класс XMLSocket для связи с устройством сервера через TCP/IP через порт 5750. Так, например, я могу запустить клиент Flash в браузере и подключиться к серверу, который есть в интернете.
Поскольку последние версии Android поддерживают Flash, я ожидаю, что это сработает, когда мы установим Flash-клиент на устройство Android. Однако попытка подключения просто зависает. У меня в настоящее время нет диагностики на стороне клиента, только работающее приложение Flash. Поэтому у нас нет логов или стандартных сообщений об ошибках.
Устройство сервера - это, по сути, черный ящик, но очевидно, что сервер никогда не получает запрос от клиента. Это говорит о том, что клиент не смог открыть сокет.
Базовый веб-поиск показывает, что об этой ситуации известно немного. Есть мысли о том, что здесь происходит?
Например, может быть, XMLSocket просто не работает в Android? Или Android блокирует порт 5750? Или в Flash Player встроены какие-то ограничения для песочницы или брандмауэра?
Мы испробовали несколько разных устройств Android под управлением Android 2.2-2.3 и Android Flash Player 10-11. Клиент написан на ActionScript 2.
1 ответ
Вероятно, это проблема настроек безопасности.
Я полагаю, ваш Flash-клиент, работающий на устройстве Android, не находится в том же домене, что и сервер. Ссылка Adobe AS2 говорит обо всем:
Метод XMLSocket.connect() может подключаться только к компьютерам в том же домене, где находится SWF-файл. Это ограничение не распространяется на SWF-файлы, работающие на локальном диске. (Это ограничение идентично правилам безопасности для loadVariables(), XML.sendAndLoad() и XML.load().) Чтобы подключиться к демону сервера, работающему в домене, отличном от того, где находится SWF, вы можете создать файл политики безопасности на сервере, который разрешает доступ из определенных доменов.
Настройка сервера для связи с объектом XMLSocket может быть сложной. Если вашему приложению не требуется интерактивность в реальном времени, вместо функции XMLSocket используйте функцию XML-сервера на основе Flash HTTP (XML.load(), XML.sendAndLoad(), XML.send()) или функцию loadVariables (). учебный класс. Чтобы использовать методы класса XMLSocket, вы должны сначала использовать конструктор, новый XMLSocket, для создания объекта XMLSocket.
Есть несколько других проблем, связанных с вашим вопросом, на которые стоит обратить внимание: