无法使用 AS3.0 XMLSocket 连接到服务器
Posted
技术标签:
【中文标题】无法使用 AS3.0 XMLSocket 连接到服务器【英文标题】:Can't connect to server with AS3.0 XMLSocket 【发布时间】:2011-01-14 01:10:51 【问题描述】:我有一个用 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 文件是本地文件,我是否仍然需要策略文件?
【问题讨论】:
【参考方案1】:确保为所有潜在的error events 添加侦听器,这将消除调试中的大量猜测。 我建议更改example from the 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);
【讨论】:
【参考方案2】:我会采用grapefrukt 的策略,看看你遇到了什么错误。
我的猜测是这是一个安全错误。我认为您在尝试通过套接字连接时总是需要一个策略文件服务器。
【讨论】:
【参考方案3】:我使用未注册的帐户发布了此问题,因此我无法选择最佳答案或评论,但基本上添加事件处理程序效果很好。结果确实是一个安全错误,因此可能是策略文件的问题。但是,我发现一个更简单的解决方案是只修改 Flash 播放器上的设置,以始终允许某些文件夹或文件的网络访问。我用这个网站修改了设置:http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html
【讨论】:
以上是关于无法使用 AS3.0 XMLSocket 连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章