在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
注意:XMLSocket 接收到服务端下发的数据时,将连续放于接收缓冲区,直到接收到 "\0" 字节(字节内容为 ASCII 值 0),才认为接收完成,并调用相应的 onData 或 onXML 事件,因此,服务端使用标准的 String 类族,则在发送数据结尾应手动加上 "\0",同样,当XMLSocket发送数据时,也会在数据的结尾自动加上"\0"。 1、允许FLASH访问网络 2、如果只是运行或者发布成EXE,不调试,不会出现问题,调试之后出现安全沙箱问题
Flash Player 6 以上版本引入了安全策略文件,在进行正式的通信前,会检查目标位置是否存在合法的安全策略,以防止不同域内的应用无限制任意互访。
HTTP 方式下,Flash Player 会检查目标域根目录下是否存在 crossdomain.xml,如果有,则获取并分析其内容(内容后述)以确定是否允许继续访问。
Socket 方式下,Flash Player 获取安全策略稍微复杂些,从 9.0.115.0 版起,标准步骤如下(以下描述以 IE 为标准,例外情况后述): 解决方案: 1) 在服务端写一个程序,监听 843 端口,当收到 "<policy-file-request/>" 时将恰当的策略内容(crossdomain.xml)发送回客户端。 代码如下
package{ import flash.display.Sprite; import flash.events.*; import flash.net.XMLSocket; import flash.system.Security; public class ceshi extends Sprite { private var socket:XMLSocket; public function ceshi() { //Security.allowDomain("localhost:10000"); btn.addEventListener(MouseEvent.CLICK,onClick) socket = new XMLSocket(); // Add an event listener to be notified when the connection is made socket.addEventListener( Event.CONNECT, onConnect ); // Connect to the server socket.connect( "localhost", 10000 ); } private function onClick(event:MouseEvent):void { trace("点击鼠标了") socket.send("12321321321321321"); } private function onConnect( event:Event ):void { Security.loadPolicyFile("xmlsocket://localhost:843"); trace( "The xml socket is now connected..." ); } } }
private void BeginSafe() { string host = "127.0.0.1"; int port = 843; byte[] data; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket sc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sc.Bind(ipe); sc.Listen(5); while (serverFlag) { Thread.Sleep(100); data = new byte[1024]; Socket clientSocket = sc.Accept(); int count = clientSocket.Receive(data, data.Length, 0);//接收的字节 string recstr = Encoding.UTF8.GetString(data, 0, count);//byte[]转换成string if (recstr.IndexOf("<policy-file-request/>") >= 0) { byte[] datas = System.Text.Encoding.UTF8.GetBytes("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"10000\" /></cross-domain-policy>\0"); clientSocket.Send(datas); clientSocket.Close(); continue; } } }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论