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);
}
}
}