Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.10.2010, 15:38
Alex_YAROST_22 вне форума Посмотреть профиль Отправить личное сообщение для Alex_YAROST_22 Найти все сообщения от Alex_YAROST_22
  № 1  
Ответить с цитированием
Alex_YAROST_22
[+1.3 18.03.10]

Регистрация: Mar 2010
Сообщений: 45
По умолчанию Соединение flash-клиента и java-приложения.

Привет всем.
Первая просьба, пожалуйста не отправляйте в поиск Во всех темах по этому вопросу всех отправляют в поиск, а ответа так и нету
Собственно вопрос: есть flash-клиент (не AIR), есть java-приложуха, запускается webstart'ом. Между ними надо установить соединение для обмена данными в... ммм... ну в бинарном виде короче, т.е. не какието xml-структурированные наборы а конкретно bytearray. Соединение создаю использую Socket, не вижу других способов - если есть, буду благодарен.
Собственно по коду вопросов нет, но вываливается Error #2048: Security sandbox violation. Соединение происходит (это видно тем-же netstat'ом) и просто реджектится из-за каких-то ограничений безопасности. Советуют загружать crossdomain - я загружаю. используя Security.loadPolicyFile() и Security.AllowDomain(); да и просто лежит в корне.
В самом кроссдомейнике прописаны все домены и все порты. Коннектится к java-приложухе пробовал и по localhost и по ip-локальной сети. Без разницы.

Посоветуйте плиз, что делать теперь? Неужели нет никакого способа установить соединение?

Старый 07.10.2010, 16:32
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 2  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Если crossdomain лежит в корне, в нем все правильно написано и он доступен, должно быть все хорошо. Скиньте ссылку на кроссдоменник.
__________________
#flasher@irc.trg.ru:6667

Старый 07.10.2010, 16:49
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
использую Socket, не вижу других способов
их нет

Цитата:
Неужели нет никакого способа установить соединение?
Есть - попробуйте отдавать файл политики (его содержимое) по 843-му порту
__________________
...вселенская грусть

Старый 07.10.2010, 16:56
Alex_YAROST_22 вне форума Посмотреть профиль Отправить личное сообщение для Alex_YAROST_22 Найти все сообщения от Alex_YAROST_22
  № 4  
Ответить с цитированием
Alex_YAROST_22
[+1.3 18.03.10]

Регистрация: Mar 2010
Сообщений: 45
Спасибо за ответы, буду пробовать.

crossdomain.xml выглядит следующим образом:
Код:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" secure="false"/>
</cross-domain-policy>

Старый 07.10.2010, 19:04
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Убедитесь, что сервер правильно отдает файл политик:
Когда проигрыватель Flash Player запрашивает файл политики, он всегда передает следующую строку после установки подключения:
Код:
<policy-file-request/>
Получив эту строку, сервер может передать файл политики. Запрос проигрывателя Flash Player всегда заканчивается нулевым байтом, и ответ сервера также должен заканчиваться нулевым байтом.

Не пытайтесь использовать одно и то же подключение и для запроса файла политики, и для основного подключения. Разорвите подключение после передачи файла политики. Если этого не сделать, проигрыватель Flash Player разрывает подключение, установленное для проверки файла политики, и только после этого устанавливает основное подключение.

Старый 08.10.2010, 00:16
afarber вне форума Посмотреть профиль Отправить личное сообщение для afarber Посетить домашнюю страницу afarber Найти все сообщения от afarber
  № 6  
Ответить с цитированием
afarber
 
Аватар для afarber

Регистрация: May 2006
Адрес: Germany
Сообщений: 74
Правильно, Вашему ява-коду вначале приходит запрос от клиента:

Код:
<policy-file-request/>\0
На него нужно ответить чем-то вроде:

Код:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
<allow-access-from domain="*" to-ports="8080"/>
</cross-domain-policy>
\0
Потом клиент закрывает сокет и открывает его снова и начинается настоящее общение.

Можно еще как вариант текст наверху отдавать через порт 843, тогда не будет задержки в 3 секунды. Но не для всех будет работать (из корп. сетей), так что лучше все-таки и по основному сокету уметь ответить.

Если сделать файл mm.cfg:

Код:
ErrorReportingEnable=1
TraceOutputFileEnable=1
PolicyFileLog=1
и установить debug flash player, то можно будет подробнее посмотреть в файлах policyfiles.txt и flashlog.txt.

А файл crossdomain.xml для сокетов рояли не играет.

И смысл всей этой лабуды в том, чтобы если есть корпоративная сеть и какой нибудь работник из нее серфает и открывает интернетную страницу с вражеским баннером, то не дать тому банеру открывать сокетные соединения к mail-серверу или другим серверам внутри этой корпоративной сети.


Последний раз редактировалось afarber; 08.10.2010 в 00:39.
Старый 11.10.2010, 13:05
Alex_YAROST_22 вне форума Посмотреть профиль Отправить личное сообщение для Alex_YAROST_22 Найти все сообщения от Alex_YAROST_22
  № 7  
Ответить с цитированием
Alex_YAROST_22
[+1.3 18.03.10]

Регистрация: Mar 2010
Сообщений: 45
Спасибо за обстоятельные ответы. Хотелось бы уточнить некоторые детали:
1. Запрос <policy-file-request/> флэш-плеер отправляет сам, автоматически?
2. Отвечать на него надо уже, соответственно ручками. Т.е. писать в сокет?
3. Пытаемся читать после установления соединения из сокета на стороне ява-приложения, но ничего нет. Может ли так быть, что этот запрос генерируется только когда флэш запускается НЕ локально, а при локальном запуске такого запроса просто не происходит?

update: запустил удаленно. всё равно ява-приложуха нм сокете никаких данных не видит


Последний раз редактировалось Alex_YAROST_22; 11.10.2010 в 13:10.
Старый 11.10.2010, 13:19
tikhop вне форума Посмотреть профиль Отправить личное сообщение для tikhop Найти все сообщения от tikhop
  № 8  
Ответить с цитированием
tikhop

Регистрация: Jul 2006
Сообщений: 170
тут, я думаю, можно найти решение: http://www.broculos.net/tutorials/ho...er/20080320/en

Старый 11.10.2010, 13:32
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 9  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
1- да
2- да
3- да, всегда именно так и есть

Цитата:
запустил удаленно. всё равно ява-приложуха нм сокете никаких данных не видит
если у swf-ки не получается приконнектиться к 843-му порту, то она коннектится к порту приложения, и туда шлет запрос на политику безопасности. Как только получает ответ - отваливается и коннектится снова, если файл политики это разрешает.

ЗЫ
Туториал, приведенный tikhop, на 100% рабочий, проверено =)
__________________
...вселенская грусть

Старый 13.10.2010, 15:37
Alex_YAROST_22 вне форума Посмотреть профиль Отправить личное сообщение для Alex_YAROST_22 Найти все сообщения от Alex_YAROST_22
  № 10  
Ответить с цитированием
Alex_YAROST_22
[+1.3 18.03.10]

Регистрация: Mar 2010
Сообщений: 45
Пока не получается. Хотелось бы уточнить, кто может достоверно сказать - срабатывает ли событие сокета onData ,когда на сокет приходит текст crossdomain-ника? Или он где-то тонет в глубинах реализации сокета? (здесь у меня неправильный синтаксис ответа был. надо быть внимательным)

Добавлено через 19 часов 52 минуты
Хорошая тема, хорошее решение

Всё получилось, tikhop и afarber особое спасибо. Туториал приведенный tikhop'ом рабочий - 100%

Единственное замечание, выполнять Security.loadPolicyFile() не обязательно! Со стороны клиента необходимо
1. выполнить Socket.connect("127.0.0.1",15556); //предположим это порт где у нас крутится полиси-сервер, т.е. "отвечалка" на <policy-file-request/>
2. выполнить Socket.connect("127.0.0.1",15555); //а это порт по которому идет основная работа с приложением.

Суть в том, что просто при попытке установки соединения запрос безопасности будет отправлен автоматом и если на него правильно ответить, то след. коннект будет выполнен уже без проблем.

А, вот еще что, разновсякие "localhost" "www.vasya.com" не резольвятся при выполнении socket.connect() так что только IP-адрес!


Последний раз редактировалось Alex_YAROST_22; 14.10.2010 в 11:31.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
java , security error , socket
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.