2012-02-29 63 views
0

我試圖在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); 
} 

但圖像簡化版,負載,即使發送和接收的字節是完全相等。

+0

在你的sendFile中,我如何遞增?我覺得你永遠不會擺脫這種循環? – Eduardo 2012-02-29 14:42:07

+0

不需要增加,因爲當字節數組超出字節時,循環會中斷。我也測試過它,它確實沒有出現這個循環。 – user1167572 2012-02-29 14:46:06

+0

如果我是一個常量,總是等於0,那麼r.data.readBytes(b,i,r.data.bytesAvailable)是做什麼的? – Eduardo 2012-02-29 18:59:16

回答

0

我只是簡單地修改如下發件人代碼:


else 
{ 
r.data.readBytes(b, i, r.data.bytesAvailable); 
socket.send(b, 0, 0, "127.0.0.1", 12345); 
b = new ByteArray(); 
b.writeByte(0)  // ADD THIS NEW LINE 
socket.send(b, 0, 0, "127.0.0.1", 12345); 
trace(b.bytesAvailable); 
trace(r.data.bytesAvailable); 
break; 
} 

而且這將觸發loadImg功能。

+0

對不起:) :) – YHS 2013-06-23 03:48:34

+0

感謝您的清理:-) – kleopatra 2013-06-23 07:32:15