Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > crossdomain policy-file-request


Автор: Lion69 9.7.2010, 16:44
1) есть полностью рабочий сервер-демон написаный на ПХП. проверялся телнетом. он может принимать данные и отсылать их.. он работает на двох портах: 8080 и 843. 
2) есть клиент написаный на екшнскриптах 3.0 который связывается с сервером по порту 8080...(а за умолчанием он связывается и по порту 843)... связь с сервером устанавливается на обеих портах. По порту 843 (автоматически) серверу приходит строка <policy-file-request/>, сервер  ее обрабатывает и отсылает слиенту  содержимое кроссдомейновского файла(он менялся у меня сто раз.... пробывал ставить все варианты, которые находил в интернете)... но в сейчас он у меня такой...

Код

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="lion69" to-ports="*" />
<allow-access-from domain="12.12.12.1" to-ports="*" />
</cross-domain-policy>


3) запускаю клиет... на сервере видно что связь есть... но вылетают непонятные ошибки....
ошибка_1:

*
Код

** Нарушение безопасности изолированной среды ***
Подключение к 12.12.12.1:8080 прервано – нет разрешения от file:////12.12.12.1/c/xampp/htdocs/mic/client%5Fnew.swf

непонятная ошибка.... потому что непонятно почему он хочет достучатся к этому файлу....
ошибка_2:
<pre><code>security error[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048: Нарушение изолированной среды: file:////12.12.12.1/c/xampp/htdocs/mic/client%5Fnew.swf не может загрузить данные из 12.12.12.1:8080."]
в браузере выдает только  ошибку_2.
в флеше пробывал писать такую строку 

Код

//Security.allowDomain(ip);
//Security.loadPolicyFile("http://"+ip+"/crossdomain.xml");

не помогает... решил закоментировать...
привожу пример своей флешки

Код

var ip = '12.12.12.1';
var DELAY = 3000;
var socket:Socket;
L('L');
//Security.allowDomain(ip);
//Security.loadPolicyFile("http://"+ip+"/crossdomain.xml");
//Security.loadPolicyFile("//12.12.12.2/c/mysql/home/x.x/subdomain/crossdomain.xml");
myConnect(ip, 8080);
function myConnect(ip:String,port:int):void
{    
    if(ip && port)
    {        
        socket = new Socket(ip,port);
        socket.connect(ip,port);    
        add_events();
    }
}
function L(str)
{
    myText.appendText(str+"\n");    
    trace(str);
}
function add_events():void
{
    socket.addEventListener(Event.CONNECT,socket_connected);
    socket.addEventListener(ProgressEvent.SOCKET_DATA,data_receiving);
    socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}

function securityErrorHandler(event:SecurityErrorEvent):void
{
    trace("security error"+event)
    L("security error"+event);
}

var flag_connected = 0;
function socket_connected(event:Event):void
{
    if(!flag_connected)
    {
        flag_connected = 1;        
        L('socket_connected');
    }
}

function ioErrorHandler(event:IOErrorEvent)
{
    trace('some error was occured'+event);
    L('some error was occured'+event);
}

var data_bytes:ByteArray = new ByteArray();
function data_receiving(event:ProgressEvent):void
{    
    //socket.readBytes(data_bytes,0,socket.bytesAvailable);    
    L("data = "+data_bytes.toString());
    //data_bytes.uncompress(CompressionAlgorithm.DEFLATE);
    //socket.flush();
}


привожу пример сервера на пхп
Код

class PolicyServerClient extends socketServerClient
{

        public $DATA  = "";
        
        public function on_read()
        {        
                
                $data = $this->read_buffer;
                $this->read_buffer  = '';
                
                $this->DATA.=$data;
                
                if(strpos($this->DATA, '<policy-file-request/>\0')>=0)
                {
                    $this->write(file_get_contents('crossdomain.xml'));                    
                    $this->write(0);    
                    $this->DATA='';
                    L("<br>policy-file-request from 843!!!!!<br>");                    
                }
                
                //L("<br>".$this->DATA."<br>");
                //L($this->DATA);
                
                
            /*
                //if(false !== strpos($this->read_buffer,"\0"))
               //{
                        $data = trim($this->read_buffer);
                        $this->read_buffer  = '';
                        if($data == '<policy-file-request/>')
                        {
                                echo 'Policy file request! Return the crossdomain.xml'."\n";
                                //$this->write(file_get_contents('crossdomain.xml'));
                                $this->write("121212");
                                
                        }
                //}
                */
        }
        public function on_connect()
        {                
                L("$this->remote_address connected to 843<br>");//просто трейс
        }
        public function write($buffer, $length = 4096)
        {
                return parent::write($buffer, $length);
        }

Автор: bars80080 9.7.2010, 16:49
а пробовал работать с портом не 843, а более высоким, чем 1024?

Автор: Lion69 9.7.2010, 18:09
bars80080, 
а зачем... если клиент сам с ним не связывается.... а запрос шлет сама макромедиа... автоматически.... и отсылает ему(серверу) <policy-file-request/>

Автор: bars80080 9.7.2010, 19:06
а просто попробовать?

Автор: Lion69 9.7.2010, 20:51
попробовал... нет не работает..

Автор: Lion69 15.7.2010, 12:10

ошибок было несколько
1) порт 8080 для этого дела не катит....
2)кросдомейн  считывался с файла а потом кидался в сокет...(не знаю в чем причина но так тоже не выходит) 

Автор: bars80080 15.7.2010, 13:50
Цитата(Lion69 @  9.7.2010,  16:44 Найти цитируемый пост)
lion69

а что это за домен? локальный? если нет, то ам вроде нужно полный указывать lion69.ru, и перечислять при этом все возможные поддомены.
то есть отдельным тэгом добавить ещё www.lion69.ru, или другой sub.lion69.ru

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)