|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2008
Сообщений: 13
|
Флешка не реагирует на cross-domain-policy (Ошибка 2048) ?
Доброго времени суток.
Уже несколько дней бьюсь над проблемой соединения флешки с сервером через сокет (оба на локалхост). Читал кажется всю необходимую информацию, даже установил специальную программку - сервер socket policy file server ( хотя в итоге у меня сервер должен быть на php ). Такое впечатление, что флешка не хочет воспринять ответ <cross-domain-policy>... (хотя запрашивает <policy-file-request/>). При попытке подключения по сокету всегда выдает ошибку securityError. В ответе на <policy-file-request/> у меня: |
|
|||||
Программка не нужна, просто еще один сокет сервер, ожидающий policy-file-request и отпарвляющий в ответ xml-строку с политикой доступа. По умолчанию порт, на котором флеш ищет файл crossdomain.xml - 843 (ну и еще тот, к которому подключаемся). С другого порта можно загрузить так: Security.loadPolicyFile("xmlsocket://" + Host + ":" + PolicyPort); Да, и secure="false", это просто рекомендация, лучше на вермя тестирования её убрать, для "чистого" резульатата
|
|
|||||
Регистрация: Mar 2008
Сообщений: 13
|
Да, да, именно так все воспринимаю,
эта програмка и есть сервер, который по идее должен выдать ответ на 843 порте на запрос <policy-file-request/>. Но дело в том, что когда отправляю этот ответ с помощью php сервера, все равно ошибка не исчезает. С помощью сервера на php отправляю Правда, в обоих случаях не представляю как зафиксировать, факт, что флеш получил ответ. Последний раз редактировалось SiteLev; 12.05.2013 в 14:18. |
|
|||||
1. Попробуйте сделать политику отдельным файлом (кстати и удобнее править будет в случае чего). Вот, взято с адобовского сайта:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" to-ports="*" /> </cross-domain-policy> Флеш использует \0 как подтверждение конца блока данных.
__________________
interplanety |
|
|||||
Регистрация: Mar 2008
Сообщений: 13
|
1) Да, пробовал и отдельный файл поставить на сервер, тоже не помогло.
2) Добавил \0 в конце ответа, т.е, получилось "<cross-domain-policy><allow-access-from domain='*' to-ports='*' /></cross-domain-policy>\n\0"; Заметил странность, когда флеш отправляет запрос на полиси, мой сервер на php почему-то отключается :-) . При отправке этого же запроса <policy-file-request/> вручную, такого не происходит. На всякий случай привожу код php сервера:
|
|
|||||
Кодировка utf ?
Что значит отключается? Если обрывается соединение - так и должно быть. После получения политики сокет обрывает соединение и устанавливает по новой на назначенном порту. Попробуйте убрать всякие "you say" и т.п. Сервер политики должен только получать запрос политики, отдавать ответ с правилами политики и закрывать соединение после отдачи. Ничего лишнего не должно быть.
__________________
interplanety |
|
|||||
Регистрация: Mar 2008
Сообщений: 13
|
Кодировка файла crossdomain.xml utf
А во флеше у меня Притом swf-ка тоже находится в той же папке, вместе с html страницей. Кстати, в этом файле crossdomain.xml все символы вроде такие, что не должно иметь значение utf. А сервер на php действительно отключается, т.е, сама консольная программа отключается почему-то (а не соединение) , когда флешка пытается подкючиться по сокету :-) |
|
|||||
Цитата:
Вы не путаете понятия кроссдомена и сокет-политики? Для того чтобы подключить сокет-соединение, не нужно грузить файл политики отдельно (если он не лежит где-нибудь отдельно от сайта). var sock = new Socket(); sock.addEventListener(Event.CONNECT, OnConnect); sock.addEventListener(SecurityErrorEvent.SECURITY_ERROR, OnSecurityError); sock.connect(MyHosht,Port); // хост, порт Ну и проверяйте свой php сервер. Раз он отключается при попытке коннекта, значит определенно имеет какие-то проблемы.
__________________
interplanety |
|
|||||
Регистрация: Mar 2008
Сообщений: 13
|
Ок, спасибо
Действительно с php у меня видимо что-то нито, потому, что там не нормально работает также код записи лога в файл. Но вопрос в том, что я в начале использовал для ответа полиси не php, другой сервер специальный для флеша (называется Socket policy file server ). Тоже не исчезает ошибка securityError. Код подключения сокета во флешке у меня примерно такой же, как у Вас. var s:Socket = new Socket( host, port ); s.addEventListener(ProgressEvent.SOCKET_DATA, sData ); s.addEventListener(SecurityErrorEvent.SECURITY_ERROR, secuerror); function secuerror(event:SecurityErrorEvent):void { trace(event);//Получаю SecurityErrorEvent type="securityError"... Error #2048 } Вот сейчас слушаю порт 843. при подключении сокета пришел запрос <policy-file-request/> и потом соединение сразу же разорвано со стороны клиента (флешки очевидно). Флешка наверно не должна была так быстро сбрасывать соединение? Добавлено через 28 часов 29 минут Сменил номер порта подключения с 1000 на 12000, ошибка (securityError ) исчезла. Огромное спасибо за ответы :-) Последний раз редактировалось SiteLev; 12.05.2013 в 23:21. |
Часовой пояс GMT +4, время: 07:10. |
|
« Предыдущая тема | Следующая тема » |
Теги |
php , socket , сервер |
|
|