2011-08-11 33 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