【问题标题】:Open swf file than works with socket打开 swf 文件而不是使用套接字
【发布时间】:2011-11-29 20:39:24
【问题描述】:

对不起,我的英语不好。

我有以下问题:

我有一个 .fla 文件,它适用于 Socket 类。有一个服务器(用Delphi XE写的,但没关系)。我从我的 .fla 连接到它。 当我从 Flash Professional CS5 中执行我的 .fla 时,一切正常。但是当我尝试从资源管理器(Win 7,Flash Player 10)执行生成的 .swf 时,我收到了一个错误:

SecurityError: Error #2010: Local-with-filesystem SWF files are not
 permitted to use sockets. at flash.net::Socket/internalConnect() at
 flash.net::Socket/connect() at payterminal::TLogger() at
 payterminal::TMainTerminalClass() at
 testterminal_fla::MainTimeline/frame1()

Socket 连接服务器如下:

Sock.connect('127.0.0.1', 5243);

我尝试将“文件->发布设置”中的“本地播放安全”设置更改为“仅访问网络”。

好的。 Flash 播放器启动时没有错误,但它会向服务器发送以下消息:

<policy-file-request/>

此套接字连接关闭后。

我也尝试使用 Security.AllowDomain() 方法,但没有产生积极的结果。

我尝试了另一种方法。服务器有两个监听套接字。第一次监听 843 端口。当此套接字接收到消息 policy-file-request 时,它发送到 .swf 的跨域文件,如下所示:

 <?xml version="1.0"?>  <!DOCTYPE cross-domain-policy SYSTEM
 "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">  <!-- Policy
 file for xmlsocket://socks.mysite.com -->  <cross-domain-policy>  
     <allow-access-from domain="*"/>  
 </cross-domain-policy>

之后,socket(843) 关闭。 但是第二个监听套接字得到了相同的消息:。

在这一切之后,我的 .swf 仍然在 Flash Player 中打开,没有任何错误,但套接字连接没有发生。 我尝试了不同的跨域文件,但我所有的尝试都导致了相同的结果。

这就是我遇到的问题。我期待着你的帮助。谢谢。

【问题讨论】:

    标签: actionscript-3 cross-domain flash-cs5 flash


    【解决方案1】:

    user976479 这是完全正常的行为。
    Flash 播放器将首先尝试在端口 843 上获取主 xml 策略文件,然后如果找不到主服务器,则尝试 5243。
    一旦服务器响应跨域 Flash 播放器的请求,就会关闭连接(始终)。
    我将以下 crossdomain.xml 用于我的套接字服务器。
    请记住,一旦收到域策略,您必须再次重新连接 Flash 播放器。第二次就不会掉线了。

    <?xml version="1.0" encoding="UTF-8" ?>
      <cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFileSocket.xsd">
      <allow-access-from domain="*" to-ports="*"  />
    </cross-domain-policy>
    

    最后一件事。 使用高于 10k 的端口,因为较低的端口通常是为其他应用程序保留的,可能会与此发生冲突。

    【讨论】:

    • 作为旁注让我补充一点,当服务器发送请求“”时,它正在请求跨域,您需要使用跨域策略作为响应我用我发布的xml声明。之后,客户端套接字将断开连接,客户端将不得不重新连接到服务器。只有在那个时候你才能通过套接字发送请求。我建议阅读什么是主策略文件。我个人在我使用的每个端口上都保留了 crossdomain.xml。
    【解决方案2】:

    你的跨域文件没有问题。

    Flash 播放器的安全功能不允许本地(file:// 协议)文件访问 Internet。要在浏览器中测试您的 swf,您必须将其上传到您的服务器,然后进行测试。

    或者,您可以下载服务器以安装在本地计算机上进行测试。 我用wampserver

    编辑:由于您已经在运行本地服务器,请尝试上传到该服务器。然后以http://127.0.0.1/mySwf.swf访问您的瑞士​​法郎

    【讨论】:

    • Flash 播放器的安全功能不允许本地(文件:\\ 域)文件访问 Internet。????????真的吗?请在发布之前阅读您输入的内容。
    • 默认情况下,Flash 会将所有本地运行的 SWF 放入带有文件系统的本地沙箱中,这将阻止该 SWF 进行任何网络调用。但是,您可以在编译时选择不同的沙箱。安全指南:help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/…
    • @The_asMan 您可以将 file:\\ 域更正为 file:// 协议,而不是发布完全不必要的评论..
    • @Pranav Hosangadi 我的评论是因为我之前引用的完全不真实。我一直从本地文件系统访问网络数据。再加上操作清楚地表明正在建立一个连接,它只是被丢弃了。
    • @The_asMan 好吧,是的。默认设置阻止任何网络访问。并且不建议更改这些设置,因为其他(恶意)Flash 电影可能会滥用您的设置。因此,出于所有实际目的,我会说 FP 阻止来自本地 file:// 协议的请求
    猜你喜欢
    • 2013-01-15
    • 2015-05-05
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多