最近一个项目的客户端要改成Flex,使用Socket与C++通讯时遇到了安全沙箱问题,这是我的解决方法;
1):策略文件与主套接字在同一端口,只需调用 Socket.connect()
或 XMLSocket.connect()
方法;
2):策略文件与主套接字在不同端口,需使用特殊的“xmlsocket”
语法调用 Security.loadPolicyFile()
方法,如下所示:
Security.loadPolicyFile("xmlsocket://server.com:2525");
先调用 Security.loadPolicyFile()
方法,然后再调用 Socket.connect()
或 XMLSocket.connect()
方法。
测试代码:使用同一端口
无论是哪种情况,服务器均必须等待客户端的第一次传输之后再决定是发送策略文件还是建立主连接。当 Flash Player 请求策略文件时,它始终会在建立连接后传输以下字符串:
<policy-file-request/>
服务器收到此字符串后,即会传输该策略文件。程序对于策略文件请求和主连接并不会使用同一连接,因此应在传输策略文件后关闭连接。如果不关闭连接,Flash Player 将关闭策略文件连接,之后重新连接以建立主连接。
附网络资料:
1,首先检测目标服务器的843端口是否提供安全策略
2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://)
手段提供安全策略,如果还没检测到,则使用第3步检测
3,检测目标服务器目标端口是否提供安全策略