0

我有一个用 Python 编写的服务器,我正在尝试通过 Flash 的 XMLSocket 连接到它。我确信该服务器工作正常,因为我已经成功地将它与多个非 Flash 客户端应用程序一起使用。现在,我只想使用驻留在本地磁盘上的 SWF 连接到远程服务器。据我了解,这意味着我不需要安全策略文件,因为 SWF 不在另一个域中。我还确认文件的安全沙箱属性设置为本地信任,因此 SWF 应该能够连接到服务器并从中检索数据。这是来自 AS 文件的重要代码:

var xmlSocket:XMLSocket = new XMLSocket();
public function MainLogic() {
    xmlSocket.addEventListener(DataEvent.DATA, onDataReceived);
    xmlSocket.connect('XXX.XXX.XXX.XXX', XXXX);
}
public function onDataReceived(event:DataEvent):void {
    helloText.text = 'data received'
}

服务器被编程为在建立连接后立即发送字符串“hello\0”。但是,如果这成功发生,则动态文本框中的默认文本应替换为字符串“收到的数据”,这不会发生。即使 SWF 文件是本地文件,我是否仍然需要策略文件?

4

3 回答 3

1

确保为所有潜在的错误事件添加侦听器,这将消除调试中的大量猜测。我建议更改livedocs 中的示例以进行测试。他们设置了这些事件:

xmlSocket.addEventListener(Event.CLOSE, closeHandler);
xmlSocket.addEventListener(Event.CONNECT, connectHandler);
xmlSocket.addEventListener(DataEvent.DATA, dataHandler);
xmlSocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
xmlSocket.addEventListener(ProgressEvent.PROGRESS, progressHandler);
xmlSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
于 2010-02-07T13:48:22.883 回答
0

我用未注册的帐户发布了这个问题,所以我无法选择最佳答案或评论,但基本上添加事件处理程序效果很好。结果确实是一个安全错误,因此可能是策略文件的问题。但是,我发现一个更简单的解决方案是只修改 Flash 播放器上的设置,以始终允许某些文件夹或文件的网络访问。我用这个网站修改了设置:http: //www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

于 2010-02-07T22:00:13.680 回答
0

我会采用grapefrukt 的策略,看看你遇到了什么错误。

我的猜测是这是一个安全错误。我认为在尝试通过套接字连接时,您总是需要一个策略文件服务器。

于 2010-02-07T19:52:29.830 回答