AS3 XMLSocket работает в WIN EXE, но не в SWF - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь сделать сокет-клиент во FlashAS3 для моего сокет-сервера, написанного на nodejs. У меня также есть клиент мобильного приложения, который связывается с ним.

В AS3 я написал тестовый код, который отлично работает, когда я публикую и запускаю файл Windows EXE, но при публикации в SWF и открытии в браузерах он не подключается к серверу. Даже все, что «импортирует», не помогает. Код:

import flash.system.Security;
import flash.net.XMLSocket;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.events.DataEvent;

var xmlSocket:XMLSocket = new XMLSocket();
xmlSocket.connect("myserverhost", 88);

xmlSocket.addEventListener(DataEvent.DATA, onIncomingData);
send_btn.addEventListener(MouseEvent.CLICK, clickHandler);
disconnect_btn.addEventListener(MouseEvent.CLICK, disconnectHandler);

function clickHandler(event:MouseEvent):void
{
    xmlSocket.send(input_txt.text);
    input_txt.text = "";
}

function disconnectHandler(event:MouseEvent):void
{
    xmlSocket.close();
    send_btn.enabled = false;
}

function onIncomingData(event:DataEvent):void
{
    var items:Object = JSON.decode(event.data);
    for (var index in items) {
        trace(index+" => "+items[index]);
    }

    if(items['hello']){
        output_txt.text += items['hello'] + "\n";
    }
    else if(items['description']){
        output_txt.text += items['description'] + "\n";
    } else {
        output_txt.text += event.data + "\n";
    }


    output_txt.verticalScrollPosition = output_txt.maxVerticalScrollPosition;
}

Я гуглил и нашел совет сделать файл crossdomain.xml, но он не работает, вот оно:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" to-ports="*" secure="false"/>
</cross-domain-policy>

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Попробуйте позвонить Security.allowDonain('*'); до var xmlSocket:XMLSocket = new XMLSocket();.

0 голосов
/ 23 ноября 2011

ищите Security.loadPolicyFile

Специальный синтаксис позволяет получать файлы политики непосредственно с сервера XMLSocket. Например: System.security.loadPolicyFile ( "XMLSocket: //adobe.com: 414");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...