2012-02-29 4 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); 
} 

Но образ does't нагрузки, даже несмотря на то, отправленные и полученные байты точно равны ,

+0

В вашей sendFile, как я получаю прирост? У меня такое впечатление, что вы никогда не выходите из этого цикла? – Eduardo

+0

Нет необходимости в приращении, потому что цикл прерывается, когда массив байтов выходит из байтов. Я также тестировал его, и он вышел из цикла. – user1167572

+0

Если i тогда является константой, всегда равной 0, что делает r.data.readBytes (b, i, r.data.bytesAvailable)? – Eduardo

ответ

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

+0

спасибо за очистку :-) – kleopatra

Смежные вопросы