• flash的Socket通讯沙箱和安全策略问题


    本地播放swf,默认情况下Flash Player将不允许swf访问任何网络,包括计算机文件。 右键,全局设置,高级,受信任位置,添加相应地址可以解决;

    web发布, 需要策略文件。

    以下内容来自网络

    2、Flash中的通信方式有两种:
        1.HTTP方式:如URLLoader等用于加载远程swf、文件、图像、音视频流。
        2.Socket主要:如 XMLSocket,用于与远程服务端建立长效连接。
        Flash Player6以上版本引入了安全策略文件,在进行正式的通信前,会检查目标位置是否存在合法的安全策略,以防止不同域内的应用无限制任意互访。
        HTTP方式下,Flash Player会检查目标域根目录下是否存在crossdomain.xml,如果有,则获取并分析其内容(内容后述)以确定是否允许继续访问。
        Socket方式下,Flash Player获取安全策略稍微复杂些,从9.0.115.0版起,标准步骤如下(以下描述以IE为标准,例外情况后述):
         1)首先向目标主机 843 端口发起连接,并发送一个字符串,内容为"<policy-file-request/>",并等待返回安全策略文件并分析。
         2)若1)失败,则检查AS代码中是否使用了Security.loadPolicyFile("xmlsocket://主机:端口")方法加载安全策略文件,若有,则获取并分析。
         3)若2)失败,则向AS代码中即将连接的 "目标主机:端口" 发起请求,过程同1)。
         4)若成功获得安全策略文件并经分析认为允许建立连接,则继续执行Connect()方法,此时方真正尝试创建与目标主机的连接。

      3、解决方案
        HTTP 连接方式不用再说,只说说 Socket 方式。
        1) 在服务端写一个程序,监听843端口,当收到 "<policy-file-request/>" 时将恰当的策略内容(crossdomain.xml)发送回客户端。
        2) 在AS中通过loadPolicyFile()加载策略文件,此处需注意使用xmlsocket://,而不是 http://。
        3) 在标准服务端口中,检测到"<policy-file-request/>"时,返回策略内容。

      4、例外情况及测试结果
        经测试发现,在IE,Opera中,Flash Player会严格按上述步骤检查安全策略。
        在 FireFox, Chrome中发起连接时,Flash Player并不会向服务端发送"<policy-file-request/>",而是直接连接成功。这应该是Flash Player不同实现版本的原因。

        5、数据传输中的问题
         在XMLSocket数据传输中,需要注意以下细节,否则会出来些莫名其妙的问题。
           1.结束符号
         XMLSocket接收到服务端下发的数据时,将连续放于接收缓冲区,直到接收到""字节(字节内容为ASCII值0),才认为接收完成,并调用相应的onData或onXML事件。
         服务端若用Java编写,并使用标准的String类族,则在发送数据结尾应手动加上""。
         若用 C++ 编写,由于C++中标准字符串类型便是以字节0作结束标记,故不必再加""。
         * C++中需注意另一个问题,若自行进行了字符串处理,在决定字符串长度时,标准的strlen及String.Length()等返回的均是实际有效字符个数,最终向网络发送时,总长度应加1字节,以容纳结尾的字节0。
         * 此问题在发送安全策略内容时同样存在,故需重视。

           2.中文问题
         默认情况下,不管从哪一端发向另一端的数据,若包含了中文字符,都会产生乱码的现象,解决方法有二:
         1).在AS中加入"System.useCodepage=true;" 强制使用本地代码集,此法最方便,但是在跨语种平台上仍会出现乱码。
         2).在代码中自行编写转码函数,此法复杂些,但通用性强。具体转码算法网上很多,主要是C++服务端需要,Java中使用JDK类转换为UTF-8即可。

    参考 http://blog.csdn.net/u010150082/article/details/14002021

    http://www.cnblogs.com/wonderKK/archive/2012/06/11/2545630.html

  • 相关阅读:
    关于let 和 var 的作用域问题
    ES6数组新增方法总结
    Javascript中的async await
    Promise个人笔记---【Promise的前世今生】
    KEIL, MDK 关于C99结构体变量初始化
    C89,C99: C数组&结构体&联合体快速初始化
    13. DMA
    GPIO, AFIO
    27. USART, Universal synchronous asynchronous receiver transmitter
    中断控制及basepri 与 basepri_max
  • 原文地址:https://www.cnblogs.com/loying/p/3640383.html
Copyright © 2020-2023  润新知