无法使用 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 连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

Flash 客户端 XMLSocket 未连接到服务器

XMLSocket 可以接收数据但不能发送

无法使用 AS3 连接到 Java 服务器

XMLSocket 在 Firefox 中工作,但不在 IE 中

C#.net XMLSocket 应用程序

电脑为啥显示无法连接到这个网络?