Откройте файл SWF, чем работает с сокетом - PullRequest
1 голос
/ 03 октября 2011

Извините за мой плохой английский.

У меня следующая проблема:

У меня есть файл .fla, который работает с классом Socket.Есть сервер (написан на Delphi XE, но это не важно).Я подключаюсь к нему из моего .fla.Когда я выполняю свой .fla из Flash Professional CS5, все работает нормально.Но когда я попытался выполнить полученный .swf из Проводника (Win 7, Flash Player 10), я получил ошибку:

SecurityError: Error #2010: Local-with-filesystem SWF files are not
 permitted to use sockets. at flash.net::Socket/internalConnect() at
 flash.net::Socket/connect() at payterminal::TLogger() at
 payterminal::TMainTerminalClass() at
 testterminal_fla::MainTimeline/frame1()

Сокет подключается к серверу следующим образом:

Sock.connect ('127.0.0.1', 5243);

Я попытался изменить настройку "Безопасность локального воспроизведения" в "Файл-> Настройки публикации" на "Только доступ к сети.

ОК. Flash Player запускается без ошибок, но отправляет на сервер следующее сообщение:

<policy-file-request/>

После закрытия этого сокета.

Я также пытался использовать метод Security.AllowDomain(), но это не дало никаких положительных результатов.

Был другой метод, который я попробовал. У сервера есть два сокета прослушивания. Первое прослушивание на порту 843. Когда этот сокет получает сообщение policy-file-requestон отправляет в .swf файл междомена, например:

 <?xml version="1.0"?>  <!DOCTYPE cross-domain-policy SYSTEM
 "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">  <!-- Policy
 file for xmlsocket://socks.mysite.com -->  <cross-domain-policy>  
     <allow-access-from domain="*"/>  
 </cross-domain-policy>

После этого сокет (843) закрывается, но второй прослушивающий сокет получает то же сообщение:.

После всего этогомой .swf все еще открыт во Flash Player безошибки, но подключение к сокету не происходит.Я пробовал разные кросс-доменные файлы, но все мои попытки привели меня к одному и тому же результату.

Вот проблема, которая у меня есть.Я с нетерпением жду вашей помощи.Спасибо.

Ответы [ 2 ]

1 голос
/ 03 октября 2011

user976479 это совершенно нормальное поведение.
Сначала проигрыватель Flash попытается получить основной файл политики XML на порту 843, а затем - 5243, если не найдет мастер.
Как только сервер ответит на запрос о междоменном флеш-плеере, соединение будет закрыто (всегда).
Я использую следующий файл crossdomain.xml для своего сокет-сервера.
Помните, что после получения политики домена вам необходимо повторно подключить Flash Player. Во второй раз вы не будете отключены.

<?xml version="1.0" encoding="UTF-8" ?>
  <cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd">
  <allow-access-from domain="*" to-ports="*"  />
</cross-domain-policy>

И последнее. используйте порт выше 10k, так как нижние порты обычно зарезервированы для других приложений, и может возникнуть конфликт с этим.

0 голосов
/ 03 октября 2011

Нет проблем с вашим междоменным файлом.

Функции безопасности Flash Player не позволяют локальному файлу (file: // protocol) выходить в Интернет. Чтобы проверить ваш SWF-файл в браузере, вам нужно загрузить его на свой сервер, а затем протестировать.

Или вы можете загрузить сервер для установки на локальный компьютер для тестирования. Я использую Wampserver

РЕДАКТИРОВАТЬ: Поскольку вы уже используете локальный сервер, попробуйте загрузить на него. Затем получите доступ к своему SWF как http://127.0.0.1/mySwf.swf

...