PDA

Просмотр полной версии : Передача crossdomain.xml по http во флеш-клиент от java-сервера


okouser
29.05.2013, 16:32
empty

maxkar
29.05.2013, 16:43
Какой Content-type в заголовках ответа? flash понимает несколько различных (в том числе банальный text/xml, наверное, еще application/xml должен понимать.). Я не помню, что там сервер дает по умолчанию (и отдает ли вообще), а проверять лень (нужно обвязку кода писать). Посмотрите браузером со сниффером, что ли...

maxkar
29.05.2013, 18:25
В браузере он выдается без заголовка, так как браузер его уже распарсил (xml). Вам какой-нибудь сниффер нужен (вроде httpfox), чтобы смотреть не на содержимое, а на заголовки обмена. И там уже сравнивать, в чем разница между вашей программой и ответом от веб-сервера. Сам кросс-доменник вроде бы верный (с точностью до русская/английская с/c и подобных приколов), так что, вероятно, все же заголовки не совсем те. Соответственно, сначала выдать те же заголовки, что дает сервер, а потом по-одному удалять ненужные.

C4Grey
29.05.2013, 18:25
Возможно, стоит загружать xml не по http:
Security.loadPolicyFile('xmlsocket://' + Host + ':' + PolicyPort);

Rzer
29.05.2013, 20:22
А что у вас возвращает функция getCrossdomainBytes()? В UTF-8 ли кодировке?

C4Grey
30.05.2013, 04:05
Я так понимаю, для этого нужно писать свой сервер ддя работы по протоколу xmlsocket?
Нет, обычный ServerSocket. Вот код сервера: http://pastebin.com/unJjYnwU . Код не мой, в свое время я его с какого-то туториала содрал. С использованием http протокола при загрузке xml у меня были какие-то проблемы, нашел на Stack Overflow решение...Сейчас использую модифицированную версию, основанную на Jetserver(который, в свою очередь, использует Netty).

C4Grey
30.05.2013, 05:48
Even though the method is named Security.loadPolicyFile(), a policy file isn’t loaded until a network call that requires a policy file is issued. Calls to loadPolicyFile() simply tell Flash Player where to look for policy files when they are needed.

You can’t receive notification of when a policy file request is initiated or completed, and there is no reason to do so. Flash Player performs policy checks asynchronously, and automatically waits to initiate connections until after the policy file checks have succeeded.
Отсюда: help.adobe.com (http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e08.html)

SocketConnection: http://pastebin.com/rAFMaXdT
MainServer.PolicyXML() - строка, полученая при помощи метода buildPolicy класса PolicyServer.
Там ничего особо ценного, хотя, возможно, поможет добавление null в конце сообщения: _socketOut.println(msg + "\u0000");

djyamato
30.05.2013, 11:38
Есть готовое решение, гляньте http://www.smartsocket.net/
Обратите внимание на config.json, который java сервер создает при первом запуске.
Собственно, тут и писать ничего не надо, AS сторона там же в исходниках уже есть