我有一個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
從來沒有被我的代碼捕獲(我不知道這是否表明它實際上曾經派發過)。
有沒有額外的步驟,我需要採取允許這種溝通?
Tsk tsk Marty,你問在網上,而不是先問我在辦公室?我很生氣:P –
@J_A_X - 小世界! :) ...這就是你使用一些不起眼的在線句柄。 –