2011-08-11 95 views
1

我有一个flex .swf和一个独立的AIR项目,我试图通过套接字与对方进行通信。Flex/AIR Socket通信 - Flex从不接收数据

这两个程序连接正常,并且.swf能够将数据发送到AIR应用程序而没有问题。但是,我发现当AIR应用程序将数据发送回Flex时,它永远不会收到。

  • .swf通过浏览器中的file:// URI在本地启动。
  • .swf文件连接和CONNECT事件被触发
  • 我加断点寻找策略文件请求的建议here,但我从来没有看到一个政策文件的请求从一开始发行SWF到AIR应用程序。

下面是我从SWF运行的代码片断侦听数据:

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从来没有被我的代码捕获(我不知道这是否表明它实际上曾经派发过)。

有没有额外的步骤,我需要采取允许这种沟通?

+0

Tsk tsk Marty,你问在网上,而不是先问我在办公室?我很生气:P –

+0

@J_A_X - 小世界! :) ...这就是你使用一些不起眼的在线句柄。 –

回答

1

哎呦 - 这里的问题是,我在听的错误事件..

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