我試圖在as3中發送圖像,因爲有些圖像很大,我試圖拆分圖像然後發送它們,之後重新組裝它們。這是代碼:在AS3發送圖像
發件人代碼:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.DatagramSocketDataEvent;
import flash.events.Event;
import flash.net.DatagramSocket;
import flash.net.FileReference;
import flash.utils.ByteArray;
public class test extends Sprite
{
private var socket:DatagramSocket;
private var r:FileReference;
private var loader:Loader;
public function test()
{
socket = new DatagramSocket();
socket.bind(12395, "127.0.0.1");
r = new FileReference();
r.addEventListener(Event.SELECT, loadFile);
r.browse();
}
protected function loadFile(event:Event):void
{
r.addEventListener(Event.COMPLETE, sendFile);
r.load();
}
protected function sendFile(event:Event):void
{
var b:ByteArray;
trace(r.data.bytesAvailable);
for(var i:uint = 0; i < r.data.bytesAvailable;)
{
b = new ByteArray();
if(r.data.bytesAvailable >= 1024)
{
r.data.readBytes(b, 0, 1024);
socket.send(b, 0, 0, "127.0.0.1", 12345);
trace(b.bytesAvailable);
trace(r.data.bytesAvailable);
}
else
{
r.data.readBytes(b, i, r.data.bytesAvailable);
socket.send(b, 0, 0, "127.0.0.1", 12345);
b = new ByteArray();
socket.send(b, 0, 0, "127.0.0.1", 12345);
trace(b.bytesAvailable);
trace(r.data.bytesAvailable);
break;
}
}
trace("----------------------------");
}
}
}
接收器代碼:
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.DatagramSocketDataEvent;
import flash.events.Event;
import flash.net.DatagramSocket;
import flash.net.FileReference;
import flash.utils.ByteArray;
var socket:DatagramSocket;
var loader:Loader;
var b:ByteArray;
var i:uint = 0;
b = new ByteArray();
socket = new DatagramSocket();
socket.bind(12345, "127.0.0.1");
socket.addEventListener(DatagramSocketDataEvent.DATA, handleData);
socket.receive();
function handleData(event:DatagramSocketDataEvent):void
{
if(event.data.bytesAvailable != 0)
{
trace("writing bytes...");
event.data.readBytes(b, i);
trace(b.bytesAvailable);
//b.length = b.length + 1;
i = i + 1024;
}
else
{
loadImg();
}
}
function loadImg():void
{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, addToStage);
loader.loadBytes(b);
}
function addToStage(event:Event):void
{
addChild(loader);
}
但圖像簡化版,負載,即使發送和接收的字節是完全相等。
在你的sendFile中,我如何遞增?我覺得你永遠不會擺脫這種循環? – Eduardo 2012-02-29 14:42:07
不需要增加,因爲當字節數組超出字節時,循環會中斷。我也測試過它,它確實沒有出現這個循環。 – user1167572 2012-02-29 14:46:06
如果我是一個常量,總是等於0,那麼r.data.readBytes(b,i,r.data.bytesAvailable)是做什麼的? – Eduardo 2012-02-29 18:59:16