PDA

Просмотр полной версии : запустить флешку, работающую с сокетом, на компьютере


THandle
22.09.2011, 22:50
Всем привет.

Просмотрел некоторое количество информации в интернете, вроде бы все просто, но сделать то что мне надо не получается.

В общем ситуация следующая:
Есть флешка, она работает с Socket. Есть сервер, находится он на том же компе. Флешка к нему подключается. Из среды Flash всё замечательно, а вот из Explorer'а запускается Flash Player с ошибкой:

SecurityError: Error #2010: Не допускается использование сокетов SWF-файлам в local-with-filesystem.
at flash.net::Socket/internalConnect()
at flash.net::Socket/connect()
at payterminal::TLogger()
at payterminal::TMainTerminalClass()
at testterminal_fla::MainTimeline/frame1()

В интернете нашел, что нужно в File->Publish Settings сменить настройку Local playback security на Access network only.

Ок. Флешка запускается без ошибке, но шлет на сервер:
<policy-file-request/>

и коннект отваливается.
Насколько понял нужно прицепить(просто положить рядом?) crossdomain.
Но попробовав неколько, не получил никакого изменения результата.

Пожалуйста подскажите, как добиться требуемого сценария работы.
Спасибо.

bav
23.09.2011, 00:43
Почитайте про подключение к сокетам (http://help.adobe.com/ru_RU/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7c60.html#WS5b3ccc516d4fbf351e63e3d118a9b90204-7c63).

Добавлено через 6 минут
Проще говоря, вам нужно на, скажем, 843 порт посадить слушающий сервер, который будет принимать клиентов, получать от них <policy-file-request/>, отдавать им crossdomain и закрывать соединение. При этом флешка должна подключаться к основному порту сервера. Обращение к 843 порту, внутреннее дело плеера.

Добавлено через 15 минут
Еще можно поискать (http://www.flasher.ru/forum/showthread.php?t=115854) слово "сокет".

THandle
26.09.2011, 00:37
Попробовал. На сервере висит два прослушивающих сокета. Один на порт 843, другой на используемый у меня 5243. В итоге приходит запрос <policy-file-request/> на оба, хотя с 843 отсылаю файл crossdomain вида:

<?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>

и закрываю соединение.
Флешка висит открытая. Никаких ошибок не выдает. Но и подключения не происходит больше по моему 5243 порту, хотя в самом коде флешки, если подключение не удалось она постоянно подключается. Подключение происходит через сокет следующим образом:

Sock.connect('127.0.0.1', 5243);

Где Sock - экземпляр Socket.

Я не понимаю почему так происходит и в чем может быть проблема. Пробовал отсылать по обоим портам. В другом месте мне посоветовали AllowDomain.. и.. если честно я уже запутлася. Хотя вроде бы задача не сложная.

THandle
03.10.2011, 12:45
Вопрос, к сожалению, так и не получилось решить. Пробовал много вариантов crossdomain'а но почему то повторно все равно отсылается <policy-file-request/>. Хотя вроде бы сначала дожидаюсь ответа от 843 сокета и только потом подключаюсь по рабочему.

bav
03.10.2011, 17:30
Попробуйте отдавать по 843 порту crossdomain следующего содержания:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" meta-policy="master-only"/>
</cross-domain-policy>

Насколько мне известно тег meta-policy="master-only" указывает плееру довольствоваться кроссдомейном только с 843 порта и не делать запрос <policy-file-request/> на основной порт приложения (в вашем случае 5243).