Actionscript 3 AS3,空气,插座。如何检查writeObject()传输的进度?

Actionscript 3 AS3,空气,插座。如何检查writeObject()传输的进度?,actionscript-3,flash,sockets,air,Actionscript 3,Flash,Sockets,Air,我正在处理AIR和Sockets,使用一个服务器应用程序和另一个作为客户端 服务器向客户端发送对象: clientSocket.writeObject(myObject); 客户端有一个侦听器,如下所示: socket.addEventListener(ProgressEvent.SOCKET_DATA, socketData); 如何知道传入对象的大小?我需要监视这个过程,因为当传输完成时,我需要执行另一个过程 我试过这个,但不起作用: var total:int = 0; private

我正在处理AIR和Sockets,使用一个服务器应用程序和另一个作为客户端

服务器向客户端发送对象:

clientSocket.writeObject(myObject);
客户端有一个侦听器,如下所示:

socket.addEventListener(ProgressEvent.SOCKET_DATA, socketData);
如何知道传入对象的大小?我需要监视这个过程,因为当传输完成时,我需要执行另一个过程

我试过这个,但不起作用:

var total:int = 0;
private function socketData(e:ProgressEvent) :void {


if (total == 0) {
    total = socket.readInt();
}

if (socket.bytesAvailable >= total) {

    trace('COMPLETE');

    total = 0;

} else {

    trace('progress:' + socket.bytesAvailable + ' | total: ' + total);
}
}


这篇文章在我的具体情况下不起作用:

我用一个黑客破解了它:

服务器:发送对象:

clientSocket.writeObject(image);// var image:Bitmap
clientSocket.flush();
客户:

A.让侦听器接收套接字数据:

socket.addEventListener(ProgressEvent.socket_数据,socketData)

B.接收字节。当所有字节都可用时,读取对象:

private var prevBytes:int = -1;

private var currentBytes:int = 0;

private function onEnterFrame(e:Event):void {

    if (currentBytes == prevBytes) {

        removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        currentBytes = 0;
        prevBytes = -1;

        var obj:* = socket.readObject();


    } else {

        prevBytes = currentBytes;

    }

    trace('Current : ' + currentBytes + ' | Prev : ' + prevBytes);

}

private function socketData(e:ProgressEvent):void {

    trace('on socketData : ' + currentBytes);

    if (currentBytes == 0) {
        addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }

    currentBytes = socket.bytesAvailable;

}

在写入对象之后,是否执行flush()?是的,我执行flush(),并且客户端正确地接收对象。我的问题是我无法控制转移过程的进度。