0

首先,我正在尝试修复我一开始就没有构建的东西,并且项目的那个人向我保证,当他离开时它工作正常,尽管我在他离开后没有接触过的版本似乎有同样的问题。一般来说,我对编程也有点陌生,所以如果我在第一篇文章中遗漏了重要信息,请告诉我,我会尝试添加更多信息。

我有一个在线托管的 Flash 应用程序,它充当用 Delphi 编写的服务器应用程序的客户端。大多数通信是使用套接字完成的,它工作正常。上传数据文件和下载结果文件是使用 HTTP 请求完成的,只要用户使用另一台计算机上的服务器实例,这些请求就可以正常工作。但是,如果用户在他们自己的计算机上安装了服务器应用程序并尝试使用它指定 localhost 作为 url,则套接字通信仍然有效,但 HTTP 请求不能。

所有基于套接字的通信都可以正常工作,当它不在本地主机上时,所有 HTTP 请求也可以正常工作,这就是为什么这对我来说如此神秘。我尝试将服务器分派的 Flash 跨域策略文件更改为完全允许的、所有端口、所有域、所有 http-request-headers,但仍然没有运气。

Flash 应用程序将在大多数情况下无限期地等待 localhost,直到我关闭服务器应用程序,然后给出以下错误消息:

Error #2044: Unhandled SecurityErrorEvent:. text=Error #2048: Security sandbox violation: http://abcde.com/Testing.swf cannot load data from http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378.

我尝试将它托管在多台计算机上,每台计算机都可以访问另一台计算机上的实例,但是当它尝试使用自己的实例时将无法正常工作。

此外,如果我只是将http://localhost:2188/guid=53D569A8-56EA-4AC2-BDA0-2F43525E1378放入 Web 浏览器,我试图得到的结果文件就会弹出就好了。

这是 Flash 应用程序中尝试下载文件的代码块:

private function downloadFile():void
{
    trace("downloadFile: " + this.guid + " from " + this.server.URL);
    fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    fileRef.addEventListener(ProgressEvent.PROGRESS, downloadProgressHandler);
    var ur:URLRequest = new URLRequest("http://" + _server.URL + ":" + _server.port);
    ur.url += "/guid=" + _guid;
    ur.method = URLRequestMethod.GET;
    fileRef.download(ur, _filename);
    _downloadStart = true;
}

如果有人有任何见解,我将不胜感激,因为我在这里完全没有想法。

4

1 回答 1

0

这是 Flash Player 安全模型的限制。要解决此问题,您可以将闪存打包为 AIR 应用程序,并取消其中的许多安全限制。

如果您将 Flash 文件托管在 Web 服务器上而不是在本地访问 .swf,您也可能会获得更好的成功。

您不能做的另一件事是从 flash 播放器访问本地文件,这是您可以使用 AIR 运行时执行的另一个示例,而您无法在 flash 播放器中执行此操作。

于 2010-06-11T22:03:50.377 回答