我有一个flex .swf和一个单独的AIR项目,我试图通过套接字相互通信。
两个程序连接正常,.swf能够毫无问题地将数据发送到AIR应用程序。但是,我发现当AIR应用程序将数据发送回Flex时,它永远不会被接收。
file://
URI在本地启动。CONNECT
事件被触发以下是我从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 :(得分:1)
哎呀 - 这里的问题是我正在听错事件。
我应该倾听ProgressEvent.SOCKET_DATA
而不是DataEvent.ON_DATA
,因为这是Socket
,而不是XMLSocket
。