![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Всем привет. ни как не получается соединяться с сокетом через флеш клинкета, вот такая ошибочка выходит, если компелировать на компе.
Error #2044: Необработанный ioError:. text=Error #2031: Ошибка сокета. at XMLSocketExample() Чуть позже вот это Error #2044: Необработанный securityError:. text=Error #2048: Нарушение изолированной среды: file:///C|/Documents%20and%20Settings/moiseev/Рабочий%20стол/1/Безымянный%2D1.swf не может загрузить данные из :8080. at XMLSocketExample() если запускать с веб сервера денвер никаких ошибок, только надпись Соединение не установлено. фаил политики безопасности сокетов выглядит так. я его размещаю в корневой папке.
package { import flash.display.Sprite; import flash.events.*; import flash.net.XMLSocket; import flash.system.Security; public class XMLSocketExample extends Sprite { private var hostName:String = null; private var port:uint = 8080; private var socket:XMLSocket; public function XMLSocketExample() { flash.system.Security.loadPolicyFile("xmlsocket:localhost:8080"); socket_off.text = "Соединение не установлено"; socket_connekt.text = "Данные не получены"; socket = new XMLSocket(); socket.addEventListener(Event.CONNECT, onConnect); socket.addEventListener(DataEvent.DATA, onDatta); socket.connect(hostName, port); } private function onConnect(event:Event):void { trace(event.type); socket_off.text = "Соединение успешно установлено"; socket.send('shutdown'); } private function onDatta(event:Event):void { socket_connekt.text = "Данные получены"; } } } исправил код, прослушал события. но соединение все равно не происходит ( package { import flash.display.Sprite; import flash.events.*; import flash.net.XMLSocket; import flash.system.Security; public class XMLSocketExample extends Sprite { private var hostName:String = null; private var port:uint = 8080; private var socket:XMLSocket; public function XMLSocketExample() { flash.system.Security.loadPolicyFile("xmlsocket://localhost:8080"); socket_off.text = "Соединение не установлено"; socket_connekt.text = "Данные не получены"; socket = new XMLSocket(); socket.addEventListener(Event.CONNECT, onConnect); socket.addEventListener(IOErrorEvent.IO_ERROR, loaderHandleIOError); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandleSecurityError); socket.addEventListener(DataEvent.DATA, onDatta); socket.connect(hostName, port); } private function onConnect(event:Event):void { trace(event.type); socket_off.text = "Соединение успешно установлено"; socket.send('shutdown'); } private function onDatta(event:Event):void { socket_connekt.text = "Данные получены"; } private function loaderHandleIOError(event:IOErrorEvent):void { } private function loaderHandleSecurityError(event:SecurityErrorEvent):void { } } } |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Не важно, где вы размещаете файл. Он (crossdomain.xml) не используется для xmlsocket. Текст данного файла должен отдаваться на запрос по xml-socket'у (и только по нему!). Ну плюс еще мелочи вроде завершающего нулевого байта и закрытия соединения. Так что правьте ваш сокет-сервер.
Добавлено через 31 секунду Уточню. Не на любой запрос. А на запрос <policy-file-request/> |
|
|||||
|
2 razerw
Принцип подключения через сокет из флеша таков: 1. Клиентский сокет (флеш) стучится к серверному сокету по порту 843 2. Серверный сокет подключает клиентский и встает на прослушку 3. Клиентский сокет отправляет строку <policy-file-request/> 4. Серверный сокет, получив ее, отправляет в ответ текст вашего полиси-файла. 5. Клиентский сокет, получив его, закрывается. 6. Клиентский сокет стучится к серверу вновь по тому порту, который разрешен в полиси-файле 7. Серверный сокет подключается и встает на прослушку. 8. Все, соединение установлено, можно обмениваться данными через сокеты. п 1 - 6 с клиентского сокета выполняются автоматически (флеш делает все сам при connect). Обеспечить чтобы действия правильно выполнял серверный сокет - ваша задача. как правильно указывает вам maxkar, полиси-файл это не тоже самое, что кроссдомен. То, что в нем должно быть, смотрите в хелпе.
__________________
interplanety |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Ничего подобного в мануале я не нашел. там лиш приводится тот код который я выложил и то без загрузки политик сокета. а так же без прослушивания событий. Может быть есть рабочий живой пример структуры кода на ас3 клиента?
|
|
|||||
|
2 razerw
Еще раз по вашим ошибкам: 1. Вы получаете Error #2044: Необработанный ioError потому, что сокет не может осуществить подключение на п. 7 (алгоритм, что я приводил выше) 2. Вы получаете Error #2044: Необработанный securityError:. потому, что в п.1-4 ваш клиентский сокет не получил адекватного полиси-файла. 3. Отсюда делаем вывод: проверяем сервер на предмет отдачи им полиси-файла по 843 порту. Когда сервер научится отдавать файл политики правильно, вы сможете осуществить подключение. Ну, а вот мануалы по клиентской стороне: В конце приводится общий пример подключения http://help.adobe.com/ru_RU/FlashPla...XMLSocket.html Про файл политики (см. "подключение к сокетам") http://help.adobe.com/ru_RU/ActionSc...8a9b90204-7c63
__________________
interplanety |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
то есть код моего клиента корректный?
Я так понял понял вот эта строка вообще лишняя сокет сервер должен постоянно отправлять фаил политики? не понятно в какой структуре. И кстати сокет сервер реализован на php я так понял это вообще не подходит для этой концепции? |
|
|||||
|
2 razerw
Эта строчка ( Security.loadPolicyFile("xmlsocket://localhost:1028"); ) нужна только если ваш сервер отдает полиси-файл по порту 1028 а не по дефолтному 843. Сокет сервер должен отдать файл политики только один раз при подключении. Когда сервер получает строку <policy-file-request/> он должен отдать полиси-файл. Если подключение прошло, больше он этой строки не получит и соотв-но не отдаст полиси-файл. Не важно на чем реализован сервер. Важно, как он выполняет свои задачи. В php есть все для создания сервера, значит сервер на нем вполне имеет право быть.
__________________
interplanety |
|
|||||
|
Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
|
Спасибо за подсказки. Они меня стимулируют гыы) и есть определенный успех! Сервер слушает 843 порт, после активности на порту отправят код политики. И появилась проблема в том что я не знаю как просматривать запросы между сервером и клиентом. Может быть есть какие то проги? Юзал прогу Charles, но к сожалению она только показывает команды echo.
|
|
|||||
|
2 razerw
Программы есть, но я ими не пользовался. Мне было достаточно вывода в консоль на сервере и трейса во флеше. Просто вариантов не так много. Вы получаете секурити еррор, если трабла с политикой и и-о еррор если трабла с подключением. Если не получено никаких ошибок, значит все работает ![]()
__________________
interplanety |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|