Я могу подтвердить, что Flex имеет доступ к двоичным сокетам. Однако есть раздражение, которое вы видели. Сначала он попытается подключиться к порту 843 на хосте, чтобы получить файл политики и посмотреть, разрешено ли соединение. Однако, если время подключения истекло (и оно позволяет получить ответ только 3 секунды), оно подключится к порту сервера и запросит файл политики (отправив ). Он считывает результат и, если соединение считается приемлемым, снова подключается к серверу для прохождения «реального» протокола.
Если файловый сервер политики на 843 не гарантирует быстрого ответа, всегда существует вероятность того, что приложение Flex выполнит запрос файла политики на порт сервера. Это реальная проблема развертывания для существующих служб, но не так уж и плохо, если вы настраиваете сервер самостоятельно, и в этом случае вам просто нужно убедиться, что запрос файла политики можно разумно отличить от любого начального запуска вашего протокола. 1003 *
Файл политики, который я отправлял обратно, выглядит примерно так:
<?xml-version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1492"/>
</cross-domain-policy>
Ваш выглядит довольно близко, за исключением тега управления сайтом, который, я не думаю, уместен.
Чрезвычайно полезно включить ведение журнала запросов файлов политик, чтобы вы могли получить представление о том, чем занимается Flex. Вот как я делаю это на моей машине Vista; пути будут отличаться в XP, но я надеюсь, что по крайней мере это описание даст вам термины веб-поиска для работы.
Сначала установите отладочную версию проигрывателя Flash.
Включите ведение журнала, введя:
ErrorReportingEnable=1
TraceOutputFileEnable=1
PolicyFileLog=1
#PolicyFileLogAppend=1 # optional but possibly useful
В C: /Users/George/mm.cfg
Теперь вы должны увидеть два файла в C: \ Users \ George \ AppData \ Roaming \ Macromedia \ Flash Player \ Logs ":
flashlog.txt
policyfiles.txt
policyfiles.txt - это то, на что вы хотите посмотреть, какие файлы политики были получены и как Flex решил на них ответить. flashlog.txt также очень полезен для захвата вывода trace (), но вы все равно можете получить его из IDE.
Еще одна вещь. Добавление прослушивателей событий в сокет полезно, чтобы помочь отличить ошибки типа ввода-вывода от нарушений политики безопасности. Вот события, которые я слушаю:
socket.addEventListener(Event.CONNECT, ServerConnect);
socket.addEventListener(Event.CLOSE, ServerClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, ServerIOError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ServerSecurityError);