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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.07.2013, 17:55
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 1  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
По умолчанию xmlsocket

Всем привет. ни как не получается соединяться с сокетом через флеш клинкета, вот такая ошибочка выходит, если компелировать на компе.

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()


если запускать с веб сервера денвер никаких ошибок, только надпись Соединение не установлено.
фаил политики безопасности сокетов выглядит так. я его размещаю в корневой папке.

PHP код:
<?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="*" to-ports="*" />  
</cross-domain-policy>
код моего приложения таков.

Код AS3:
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 = "Данные получены";
		}
    }
}
Добавлено через 15 минут
исправил код, прослушал события. но соединение все равно не происходит (
Код AS3:
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 
		{
 
		}
    }
}

Старый 02.07.2013, 19:26
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 2  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Не важно, где вы размещаете файл. Он (crossdomain.xml) не используется для xmlsocket. Текст данного файла должен отдаваться на запрос по xml-socket'у (и только по нему!). Ну плюс еще мелочи вроде завершающего нулевого байта и закрытия соединения. Так что правьте ваш сокет-сервер.

Добавлено через 31 секунду
Уточню. Не на любой запрос. А на запрос <policy-file-request/>

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 razerw

Принцип подключения через сокет из флеша таков:

1. Клиентский сокет (флеш) стучится к серверному сокету по порту 843
2. Серверный сокет подключает клиентский и встает на прослушку
3. Клиентский сокет отправляет строку <policy-file-request/>
4. Серверный сокет, получив ее, отправляет в ответ текст вашего полиси-файла.
5. Клиентский сокет, получив его, закрывается.
6. Клиентский сокет стучится к серверу вновь по тому порту, который разрешен в полиси-файле
7. Серверный сокет подключается и встает на прослушку.
8. Все, соединение установлено, можно обмениваться данными через сокеты.

п 1 - 6 с клиентского сокета выполняются автоматически (флеш делает все сам при connect). Обеспечить чтобы действия правильно выполнял серверный сокет - ваша задача.

как правильно указывает вам maxkar, полиси-файл это не тоже самое, что кроссдомен. То, что в нем должно быть, смотрите в хелпе.
__________________
interplanety

Старый 02.07.2013, 23:01
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 4  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
Ничего подобного в мануале я не нашел. там лиш приводится тот код который я выложил и то без загрузки политик сокета. а так же без прослушивания событий. Может быть есть рабочий живой пример структуры кода на ас3 клиента?

Старый 02.07.2013, 23:49
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 5  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
А на клиенте все нормально вроде бы. Максимум - не тот порт может быть указан. Это абсолютно точно проблемы на сервере. У меня есть полный пример клиента и сервера.

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
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

Старый 03.07.2013, 12:41
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 7  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
то есть код моего клиента корректный?
Я так понял понял вот эта строка вообще лишняя
Код AS3:
Security.loadPolicyFile("xmlsocket://localhost:1028");
сокет сервер должен постоянно отправлять фаил политики? не понятно в какой структуре.
И кстати сокет сервер реализован на php я так понял это вообще не подходит для этой концепции?

Старый 03.07.2013, 18:50
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 8  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 razerw

Эта строчка ( Security.loadPolicyFile("xmlsocket://localhost:1028"); ) нужна только если ваш сервер отдает полиси-файл по порту 1028 а не по дефолтному 843.

Сокет сервер должен отдать файл политики только один раз при подключении. Когда сервер получает строку <policy-file-request/> он должен отдать полиси-файл. Если подключение прошло, больше он этой строки не получит и соотв-но не отдаст полиси-файл.

Не важно на чем реализован сервер. Важно, как он выполняет свои задачи. В php есть все для создания сервера, значит сервер на нем вполне имеет право быть.
__________________
interplanety

Старый 04.07.2013, 11:57
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 9  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
Спасибо за подсказки. Они меня стимулируют гыы) и есть определенный успех! Сервер слушает 843 порт, после активности на порту отправят код политики. И появилась проблема в том что я не знаю как просматривать запросы между сервером и клиентом. Может быть есть какие то проги? Юзал прогу Charles, но к сожалению она только показывает команды echo.

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
2 razerw

Программы есть, но я ими не пользовался. Мне было достаточно вывода в консоль на сервере и трейса во флеше. Просто вариантов не так много. Вы получаете секурити еррор, если трабла с политикой и и-о еррор если трабла с подключением. Если не получено никаких ошибок, значит все работает
__________________
interplanety

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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