热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flash安全策略解决方案

问题:在研究《Flash游戏编程教程》的游戏实例《冲出重围》的时候,直接运行客户端和socket服务程序后,游戏可以正常运行。但是将flash文件发布成网页后,拷贝和修改crossdoma

问题

      在研究《Flash游戏编程教程》的游戏实例《冲出重围》的时候,直接运行客户端和socket服务程序后,游戏可以正常运行。但是将flash文件发布成网页后,拷贝和修改crossdomain.xml文件,并将相关文件放在IIS根目录下进行运行,游戏将无法继续进行。采用其他监视工具查看,服务器端会收到的错误消息。

原因:

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

分析:

     Flashplayer的安全策略检测过程如下:

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

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

解决方法:

     根据以上的分析,有3种方式的解决方案

     方法一:

     在游戏服务器绑定843端口,当监听到请求后转发安全策略,就发送以下安全策略内容:
/0
记得后面加上/0,不然FLASH会以为数据没有接收完。一切OK。

     官方也提供了在具体的服务器环境下配置的方法,较繁琐。

http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

     方法二:

     在Flash客户端的XmlSocket派生类中使用了Security.loadPolicyFile(“xmlsocket://www.xxx.com:port”) 手段,即是加入提供安全策略的服务器地址。(当然它也可以跟游戏服务器是同一台机器,大型的游戏架构应该有专门的这种服务器吧,因为它也可以起到负载平衡的作用)提供安全策略的服务器转发的内容应该和方法一的内容一致。

    方法三:

    当游戏服务器接受socket绑定时,向客户端发送安全策略内容。本人直接修改了教程提供的服务器端程序,运行游戏,一切OK,在此提供链接。

修改过的相关类

完整的解决方案

 

游戏运行界面:

游戏运行图片 

 

讨论:

       问题1:问什么游戏实例在没有发布成网页时可以正常运行,发布后却不行了?

       答:查看里面的Messager代码发现,它加载服务器安全策略的方法:Security.loadPolicyFile("127.1.1.1/crosadomain.xml");你会发现它不是"http://"或"xmlsocket:"的方式。游戏实例通讯采用的是xmlsocket的方式,所以它必须使用socket的方式去获取策略内容。"http://"方式在FlashPlayer9.0以前是支持的,但是9.0以上版本就不支持了,本人也测试过"http"的方式来获取策略内容,确实是不起作用。除非你的游戏是基于http的方式进行设计,但是客户端必须依靠轮询的方式去获取数据,这种方式太多缺陷了,已经慢慢给淘汰了。

       问题2:大型web游戏是如何部署策略文件的?

       答:大型web游戏在设计上如有可能,应该考虑尽量支持多个FlashPlay版本,它在虚拟目录上应该有crosadomain.xml策略文件,也就是说它支持旧版的http方式获取和socket方式获取。偶也不是游戏公司,今天到“坦克大作战”那里测试了下,果然可以下载到这个文件。具体的架构需要专业人士解答,哈哈


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • NetBPM的安装还是比较简单的,有比较详细的文档。1.当然是先下载运行程序了,netbpm-0.8.3.1.zip,官方网站ÿ ... [详细]
author-avatar
tanhuixi135_414
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有