【问题标题】:Flex/AIR Socket communcation - Flex never recieves dataFlex/AIR Socket 通信 - Flex 从未收到数据
【发布时间】:2011-08-11 12:35:16
【问题描述】:

我有一个 flex .swf 和一个单独的 AIR 项目,我试图通过套接字相互通信。

两个程序连接正常,.swf 能够毫无问题地将数据发送到 AIR 应用程序。但是,我发现当 AIR 应用程序将数据发送回 Flex 时,它从未被接收到。

  • .swf 通过浏览器中的file:// URI 在本地启动。
  • .swf 连接,CONNECT 事件被触发
  • 我添加了断点来查找策略文件的请求,正如 here 建议的那样,但我从未看到从 SWF 向 AIR 应用发出对策略文件的请求。

这是我从 SWF 运行以侦听数据的代码的 sn-p:

    private var address:String;
    private var port:int;
    private var socket:Socket;
    private var log:ILogger = LogUtil.getLogger(this);

    public function SocketPlayer(port:int=41051,address:String="127.0.0.1")
    {
        this.port = port;
        this.address = address;
        connect();
    }
    public function connect():void
    {
        socket = new Socket();
        socket.addEventListener(DataEvent.DATA,onData);
        socket.addEventListener(Event.CLOSE,logEvent);
        socket.addEventListener(Event.CONNECT,logEvent);
        socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,logEvent);
        socket.addEventListener(IOErrorEvent.IO_ERROR,logEvent);
        socket.connect(address,port);
        log.info("Socket connected on {0}:{1}",address,port);
    }
    private function logEvent(event:Event):void
    {
        log.info("Event: {0}", ObjectUtil.toString(event));
        if (event is TextEvent)
        {
            log.error(TextEvent(event).text)
        }
    }
    private function onData(event:DataEvent):void
    {
        log.info("Data: " + event.data);
    }

这是 AIR 应用程序中用于发送数据的代码:

    public function execute():void
    {
        var message:String = "Testing...";
        socket.writeUTF(message);
        socket.flush();
    }

(请注意,socket 存储在本地,就像在 ServerSocketConnectEvent 中传递的一样,尽管此处未显示此代码)

如果我在 SWF 内发送的代码中放置断点,我注意到套接字有一个私有 _timeoutEvent 属性,该属性设置为 flash.events.SecurityErrorEvent 的一个实例,并带有以下错误文本:

Error #2048: Security sandbox violation: file:///Users/martypitt/dev//ParsleyTest/bin-debug/RecordingTest.swf cannot load data from 127.0.0.1:41051.

但是,SecurityErrorEvent 从未被我的代码捕获(我不确定这是否表明它实际上曾被分派过)。

是否需要采取其他步骤才能允许这种通信?

【问题讨论】:

  • 啧啧Marty,你在网上问而不是在办公室先问我?我被冒犯了:P
  • @J_A_X - 小世界! :) ...这就是你使用一些不起眼的在线句柄所得到的。

标签: apache-flex sockets air


【解决方案1】:

哎呀——这里的问题是我正在监听错误的事件..

我应该听ProgressEvent.SOCKET_DATA 而不是DataEvent.ON_DATA,因为这是Socket,而不是XMLSocket

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多