flash as3 socket 不缓存图片的处理方法

package {

/*

*Author: goldli

*Email: goldli@163.com

*转载请保留以上声明

*/

       import flash.display.Loader;

       import flash.display.Sprite;

       import flash.events.Event;

       import flash.events.EventDispatcher;

       import flash.events.IOErrorEvent;

       import flash.events.ProgressEvent;

       import flash.net.Socket;

       import flash.utils.ByteArray;

       import flash.system.Security;

       import flash.system.SecurityDomain;

      

       public class imgSocker extends Sprite

       {           

              private const serverIP:String="127.0.0.1";//服务器ip

              private const serverPort:int=1280;//服务器端口

              private var imgSocket:Socket;//创建一个socket

              private var imgLoader:Loader;

              private var dataReceivedTotal:ByteArray=new ByteArray();

              private var totalBytesNum:int=0,bytesNumNext:int=0,index:int=0;

              private var receivingData:Boolean=false;

              public function imgSocker()

              {

                     var imgFile:String=root.loaderInfo.parameters["filename"];

                     imgFile="123.jpg";

                     createNewSocketClient();//创建新socket客户端

                     sendMessage(imgFile);

              }

              private function createNewSocketClient():void

              {

                     imgSocket=new Socket();//创建一个socket,并实例化

                     addEventListenerHandle(imgSocket);//添加事件

                     imgSocket.connect(serverIP,serverPort);    

              }

              private function addEventListenerHandle(owner:EventDispatcher):void

              {

                     owner.addEventListener(Event.CONNECT,beginConnect);//开始连接事件

                     owner.addEventListener(IOErrorEvent.IO_ERROR,serverNotFond);//如果Socker服务器没有处理侦听,则出错

                     owner.addEventListener(ProgressEvent.SOCKET_DATA,MsgReceived);

              }

              private function beginConnect(e:Event):void

              {

                     trace("The Client has Connected to server :"+serverIP+" at Port: "+serverPort.toString(4));    

              }

              private function serverNotFond(e:IOErrorEvent):void

              {

                     trace("The Socket Server :"+serverIP+" NOT FOUND "); 

              }

              private function MsgReceived(e:ProgressEvent):void//这里不一定一次性读取所有的数据,所以要用到标识

              {    

                     var bytesLen:int=(e.target as Socket).bytesAvailable;

                     if (!receivingData)

                     {

                            totalBytesNum=Number((e.target as Socket).readUTFBytes(bytesLen));

                            dataReceivedTotal.length=totalBytesNum;

                            trace("长度:"+totalBytesNum);

                            receivingData=true;      

                            sendMessage("download");

                     }

                     else

                     {

                            bytesNumNext+=bytesLen;

                            //trace("Socket received "+bytesLen+"/"+bytesNumNext+"/"+totalBytesNum+ " byte(s) of data");

                            (e.target as Socket).readBytes(dataReceivedTotal,index,bytesLen);

                            index=bytesNumNext;

                            //trace("索引: "+index);

                            if (totalBytesNum==bytesNumNext) loadMessage(dataReceivedTotal);

                     }

              }           

              private function sendMessage(message:String):void

              {

                     Security.allowDomain("*");

                     Security.loadPolicyFile("http://127.0.0.1/crossdomain.xml");

                     imgSocket.writeUTFBytes(message);

                     imgSocket.flush();

              }

              private function loadMessage(dataReceived:ByteArray):void

              {

                     receivingData=false;

                     imgLoader=new Loader();

                     imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadCompletedHandler);

                     imgLoader.loadBytes(dataReceived);                  

              }

              private function loadCompletedHandler(event:Event):void{

                     (event.target.loader as Loader).x=0;

                     (event.target.loader as Loader).y=0;

                     (event.target.loader as Loader).width=400;

                     (event.target.loader as Loader).height=300;

                     addChild(event.target.loader as Loader);      

              }           

       }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值