`

flash xmlsocket policy 问题

阅读更多

Firefox :
1. 只要 connect 的 远程服务器主机名为 null 或者和 FLASH 页面所在主机名相同(注意:域名和 IP 地址不相同),则不管 crossdomain.xml 文件是否使用,都可以连上远程服务器。
2. 如果使用了xmlsocket:// 协议加载 policy 文件,则默认的 80 端口下面的 crossdomain.xml 不会在读取,否则不管是否使用自定义的 crossdomain.xml 文件(已经成功读取),则都会读取默认的80 端口下面的crossdomain.xml。
3. 如果跨域连接服务器,则必须手动加载 crossdomain.xml 文件。并且 用 http:// 协议加载 crossdomain.xml 也连不上,而用 xmlsocket:// 协议加载 crossdomain.xml 文件就可以连上。

总结: http:// 协议加载 crossdomain.xml 根本不起作用。


IE:
1. 用 null 和 相同的 主机名连接, 即使用 http:// 协议加载 crossdomain.xml, 也根本不起作用, 无法连接。
2. 如果用 xmlsocket:// 协议加载 crossdomain.xml 文件, 即使跨域也能连上。

总结: http:// 协议加载 crossdomain.xml 根本不起作用。


最后总结:
1. http:// 协议加载 crossdomain.xml 根本不起作用。
2. xmlsocket:// 协议加载 crossdomain.xml 文件, 即使跨域也能连上。
3. 相同的域,如果不手动加载 policy 文件,只有 Firefox 能连上, IE不能连上。
4. 默认的 policy (80端口下面的crossdomain.xml ),由于才有的 http:// 协议,根本也不起作用。

 


 

如果连接失败,可那是下面两种原因的一种:一种是连接立即失败和运行时错误,另一种是如果无法完成连接从而产生一个ioError或者securityError事件.关于错误事件处理信息的描述,我们打算改日讨论.
    请牢记,当与一个主机建立一个Socket连接时,Flash Player要遵守如下安全沙箱规则.
    1.Flash的.swf文件和主机必须严格的在同一个域名,只有这样才可以成功建立连接.
    2.一个从网上发布的.swf文件是不可以访问本地服务器的.
    3.本地未通过认证的.swf文件是不可以访问任何网络资源的.
    4.你想跨域访问或者连接低于1024的端口,必须使用一个跨域策略文件.
    如果尝试连接未认证的域或者低端口服务,这样就违反了安全沙箱策略,同时会产生一个securityError事件.这些情况都可以通过使用一个跨域策略文件解决.
 

 

 

在Adobe Flash Player升级到9.0.124后,由于安全策略的更改,使得在socket或xmlsocket的应用里,原先如用http方式加载安全策略的手段不能继续使用了,类似此类应用必须使用xmlsocket://方式来提供安全策略。flashplayer的安全策略检测过程如下:

1,首先检测目标服务器的843端口是否提供安全策略
2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://) 手段提供安全策略,如果还没检测到,则使用第3步检测
3,检测目标服务器目标端口是否提供安全策略

如果上述检测都不成功,则socket或xmlsocket则拒绝连接目标服务器。

这就是说,现在我们还必须为应用提供一个提供安全策略的socket服务,正好,adobe开发人员提供了这样一个小工具,本人测试过,能使用。

具体内容请看:http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

请使用了socket 或xmlsocket的开发者尽早更换安全策略提供方式吧,否则新版flashplay用户就该不能正常使用你的应用了。
 



===============================================================
flash cs3 中文帮助中的说明


连接到套接字

默认情况下,禁用对套接字和 XML 套接字连接的跨域访问。此外,默认情况下还禁止访问与低于 1024 的端口上的 SWF 文件位于同一个域的套接字连接,但可以通过提供以下任一位置中的跨域策略文件来允许访问这些端口:

  • 与主套接字连接相同的端口
  • 不同端口
  • 与套接字服务器位于同一个域的 HTTP 服务器的端口 80 上

如果提供的跨域策略文件与主套接字连接位于同一端口,或者位于不同端口,则通过在跨域策略文件中使用 to-ports 属性来枚举允许的端口,如下例所示:

<?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="*" to-ports="507" /> 
   <allow-access-from domain="*.example.com" to-ports="507,516" /> 
   <allow-access-from domain="*.example.org" to-ports="516-523" /> 
   <allow-access-from domain="adobe.com" to-ports="507,516-523" /> 
   <allow-access-from domain="192.0.34.166" to-ports="*" /> 
</cross-domain-policy> 
 

要检索与主套接字连接位于相同端口中的套接字策略文件,只需调用 Socket.connect()XMLSocket.connect() 方法;并且,如果指定的域与执行调用的 SWF 文件所在的域不同,Flash Player 将自动尝试从正在尝试的主连接所在的相同端口中检索策略文件 。要从与主连接位于同一服务器上的不同端口检索套接字策略文件,需使用特殊的"xmlsocket" 语法调用 Security.loadPolicyFile() 方法,如下所示:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

先调用 Security.loadPolicyFile() 方法,然后再调用 Socket.connect()XMLSocket.connect() 方法。Flash Player 随后将一直等待完成策略文件请求,之后再决定是否允许主连接。

如果要实现套接字服务器,并且需要提供套接字策略文件,则应决定是使用接受主连接 的同一端口提供策略文件,还是使用不同的端口来提供策略文件。无论是哪种情况,服务器均必须等待客户端的第一次传输之后再决定是发送策略文件还是建立主连 接。当 Flash Player 请求策略文件时,它始终会在建立连接后传输以下字符串:

<policy-file-request/>

服务器收到此字符串后,即会传输该策略文件。程序对于策略文件请求和主连接并不会使用同一连接,因此应在传输策略文件后关闭连接。如果不关闭连接,Flash Player 将关闭策略文件连接,之后重新连接以建立主连接。

有关详细信息,请参阅套接字策略文件

 

套接字策略文件

ActionScript 对象可实例化两种不同的服务器连接:基于文档的服务器连接和套接字连接。Loader、Sound、URLLoader 和 URLStream 等 ActionScript 对象可实例化基于文档的服务器连接,这些对象均根据 URL 加载文件。ActionScript Socket 和 XMLSocket 对象进行套接字连接,这些对象操作的是数据流而非加载的文档。Flash Player 支持两种策略文件:基于文档的策略文件和套接字策略文件。基于文档的连接需要基于文档的策略文件,套接字连接则需要套接字策略文件。

Flash Player 要求使用尝试连接希望使用的同类协议传输策略文件。例如,如果将策略文件放置在您的 HTTP 服务器上,则允许其它域中的 SWF 文件从该服务器(作为 HTTP 服务器)加载数据。但是,如果在这台服务器上未提供套接字策略文件,则禁止其它域的 SWF 文件在套接字级别连接到该服务器。检索套接字策略文件的方法必须与连接方法相匹配。

由套接字服务器提供的策略文件具有与任何其它策略文件相同的语法,只是前者还必须指定要对哪些端口授予访问权限。如果策略文件来自低于 1024 的端口号,则它可以对任何端口授予访问权限;如果策略文件来自 1024 或更高的端口,则它只能对 1024 端口和更高的端口授予访问权限。允许的端口在 <allow-access-from> 标签的 to-ports 属性中指定。单个端口号、端口范围和通配符都是允许值。

下面是一个 XMLSocket 策略文件示例:

<cross-domain-policy> 
   <allow-access-from domain="*" to-ports="507" /> 
   <allow-access-from domain="*.example.com" to-ports="507,516" /> 
   <allow-access-from domain="*.example2.com" to-ports="516-523" /> 
   <allow-access-from domain="www.example2.com" to-ports="507,516-523" /> 
   <allow-access-from domain="www.example3.com" to-ports="*" /> 
</cross-domain-policy> 
 

在 Flash Player 6 中首次引入策略文件时,并不支持套接字策略文件。与套接字服务器的连接由跨域策略文件所在默认位置中的一个策略文件授权,跨域策略文件位于与套接字服务器 位于同一个域中的 HTTP 服务器的端口 80 上。为尽可能保留现有的服务器排列,Flash Player 9 仍然支持此功能。但是,Flash Player 现在的默认设置是在与套接字连接相同的端口上检索套接字策略文件。如果希望使用基于 HTTP 的策略文件来授权套接字连接,则必须使用如下所示代码显式请求 HTTP 策略文件:

Security.loadPolicyFile("http://socketServerHost.com/crossdomain.xml")
 

此外,为授权套接字连接,HTTP 策略文件只能来自跨域策略文件的默认位置,而非来自任何其它 HTTP 位置。从 HTTP 服务器获取的策略文件隐式向 1024 和所有更高端口授予套接字访问权限 ;HTTP 策略文件中的任何 to-ports 属性均被忽略。

有关套接字策略文件的详细信息,请参阅连接到套接字

分享到:
评论

相关推荐

    flash中的XMLSocket 类

    ### flash中的XMLSocket类知识点详解 #### 一、XMLSocket类概述 **XMLSocket类**是在Flash Player 5中引入的一个重要类,主要用于实现实时客户端/服务器通信。该类通过客户端套接字实现了计算机之间的通信,使得...

    flash xmlsocket实例源码

    flash xmlsocket实例源码

    flash XMLSocket java 通信(采用服务器推技术 解决了乱码 )

    本文将深入探讨如何使用XMLSocket在Flash与Java之间进行高效、稳定的数据交换,并且特别关注如何解决在通信过程中可能出现的中文乱码问题。 首先,XMLSocket是Flash中的一个类,它提供了基于TCP/IP的双向通信功能,...

    FLASH通过XMLSocket与VB后台通信代码

    这里我们关注的是如何使用FLASH与VB(Visual Basic)后台进行通信,具体实现是通过XMLSocket。XMLSocket是一种在客户端(如Flash)和服务器端(如VB应用程序)之间进行双向、实时通信的技术。下面将详细介绍这个过程...

    flash actionscript3游戏开发之as3的socket通信方式介绍即使用XMLSocket.zip

    总之,AS3中的XMLSocket是实现Flash游戏网络通信的关键工具,开发者需要理解其安全机制和连接过程,以确保在各种环境下的稳定性和兼容性。同时,合理设计数据传输协议和错误处理策略,对于提高游戏体验和降低网络...

    javascript xmlsocket 即时通讯客户端源码

    为了提高兼容性和性能,可以考虑使用polyfill库,如SockJS,它会在WebSocket不支持时自动降级到其他技术,如Flash Socket或Long Polling。 总结,JavaScript XMLSocket是实现即时通讯的一种技术,虽然现在WebSocket...

    解决xmlsocket 需要的843端口

    XMLSocket是一种基于XML的数据...总之,解决“xmlsocket 需要的843端口”问题涉及了跨域策略的理解、Python的网络编程以及安全文件`crossdomain.xml`的配置。只有正确处理这些方面,才能确保XMLSocket通信的顺利进行。

    flash策略文件

    在Flash中,XMLSocket是一种用于实现低延迟、双向通信的技术,它允许Flash应用程序与服务器进行实时数据交换。本篇文章将深入探讨“Flash策略文件”这一主题,以及如何通过XMLSocket进行连接处理。 首先,我们需要...

    C# Flash做的WebQQ程序

    总结起来,"C# Flash做的WebQQ程序"是一个结合了C#和Flash技术的Web应用,利用C#构建后端服务,Flash处理前端交互,通过XMLSocket实现即时通讯。对于想了解或学习此类技术的开发者来说,可以尝试分析程序的工作流程...

    policyServer.zip

    当Flash应用试图通过Socket或者XMLSocket连接到其他服务器时,它会首先尝试连接到目标服务器的843端口,这是Flash策略服务器的标准端口。 这个"policyServer.py"脚本就是实现这个策略服务器的关键。Python是一个多...

    Javascript与Flash中的Socket交互

    此外,由于 Flash 的安全性和浏览器兼容性问题,现代网页开发更多地转向了 WebSocket 或其他基于 JavaScript 的通信技术,如 AJAX 或 Fetch API。然而,对于需要兼容旧版浏览器或利用 Flash 功能的场景,JavaScript ...

    flash与服务器端通信

    Flash通过ActionScript语言与服务器进行通信,主要采用两种协议:XMLSocket(XML套接字)和Flash Remoting。XMLSocket提供了双向、低级别的网络通信接口,类似于TCP/IP套接字。而Flash Remoting则是一种更高级别的...

    flash连接数据库示例

    XMLSocket是Flash与服务器进行实时双向通信的手段。通过创建XMLSocket对象,设置主机名和端口号,然后打开连接,就可以发送和接收数据。在发送数据时,通常会构造一个包含SQL查询的XML文档,服务器解析后执行查询,...

    JAVA/XMLSOCKET

    标题中的"JAVA/XMLSOCKET"指的是Java编程语言与XMLSocket技术的结合应用。XMLSocket是Java提供的一种在客户端和服务器之间进行低级双向通信的方法,它允许数据在两者之间实时、连续地流动,而不像HTTP协议那样需要...

    FLASH AS3 SOCKET收发16进制示例

    在IT行业中,Flash AS3是一种广泛用于创建交互式应用程序、游戏和富互联网应用(RIA)的编程语言。Socket通信是网络编程的一个重要组成部分,它允许客户端和服务器之间进行双向通信。在AS3中,我们可以使用Socket类...

    as和后台通讯 URLLoader(URLStream) FlashRemoting XMLSocket(Socket) FMS/FCS

    - XMLSocket 类提供了一种基于TCP/IP的双向通信,允许Flash与服务器进行实时的、低延迟的数据交换。 - 它可以用于创建聊天应用、在线游戏等需要实时交互的应用。 - XMLSocket 通常用于与服务器端进行二进制或文本...

    java_and_flash.rar_flash java_java flash

    4. **XMLSocket**: 类似于Socket通信,XMLSocket提供了基于XML的二进制数据流通信,适合传输结构化数据,但现在已经不再推荐使用,因为其已被Flash Player的WebSocket API取代。 5. **AMF (Action Message Format)*...

    flash统计报表图示

    3. XML与Flash交互:利用Flash的XMLSocket或URLLoader类加载XML文件,解析后动态地绘制图表。ActionScript可以根据XML数据的改变实时更新图表,实现动态效果,如数据变化时图表自动更新。 4. 预览和交互:完成上述...

    Flash从数据库调用数据实例(asp+access+flash)

    ActionScript可以使用XMLSocket或LoadVars类与服务器进行通信,接收并显示从ASP返回的数据库数据。 实例操作流程: 1. 用户访问嵌有Flash内容的HTML页面(`lv_shiyan.html`)。 2. Flash(`lv_shiyan.swf`)通过...

    Flash与C#交互

    2. **XMLSocket or AMF (Action Message Format):** 通过建立Socket连接,Flash可以直接与C#服务器端进行双向通信。AMF是一种高效的数据序列化格式,它可以减少网络传输的数据量,提高通信效率。 在CS架构下,Flash...

Global site tag (gtag.js) - Google Analytics