【问题标题】:AS3,AIR,Socket. How to check the progress of a writeObject() transfer?AS3,AIR,插座。如何检查 writeObject() 传输的进度?
【发布时间】:2013-11-27 19:49:06
【问题描述】:

我正在处理 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);
}

}

这篇文章不适用于我的具体情况:AS3 / AIR readObject() from socket - How do you check all data has been received?

【问题讨论】:

  • 写完对象后你flush()吗?
  • 是的,我执行flush(),客户端正确接收到对象。我的问题是我无法控制传输过程的进度。

标签: actionscript-3 flash sockets air


【解决方案1】:

我用 hack 解决了它:

服务器:发送一个对象:

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

客户:

A.有一个监听器来接收套接字数据:

socket.addEventListener(ProgressEvent.SOCKET_DATA, 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;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多