AS3 XMLSocket无法检测到客户端断开连接

时间:2012-11-21 15:01:02

标签: flex sockets connection monitoring xmlsocket

在Flex应用程序(不是AIR,但Flash播放器)中,我运行了一个XMLSocket,在我的生命中,我无法弄清楚如何检测客户端断开连接。同样,当我从计算机连接到远程服务器,然后断开计算机与Internet的连接时,套接字认为它仍然连接(没有IOError或关闭事件抛出)。在我的套接字类中,我让它每隔两秒向套接字发送一条消息,希望一旦连接被切断,就会检测到XMLSocket.send()上的IOError,但即使这样也行不通!它仍然试图发送数据,并且不会抛出异常,但肯定会失败。

当互联网连接启动时,远程服务器上的套接字服务器确实从Flex客户端接收消息。

我查看了SocketMonitor和URLMonitor,但它们仅适用于AIR,而不适用于Flash播放器。

我想有一些关于我不了解的套接字的基本内容。有人可以帮忙吗?

package org.MB.components
{
import flash.errors.IOError;
import flash.events.DataEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.events.TimerEvent;
import flash.net.XMLSocket;
import flash.utils.Timer;

import org.MB.appData.DataHolder;
import org.MB.utils.XMLUtils;

public class MBSocket extends XMLSocket
{
    private var timer:Timer;

    private var _host:String;
    private var _port:int;

    public function MBSocket(host:String=null, port:int=0)
    {
        super(host, port);

        this._host = host;
        this._port = port;

        addListeners();
    }

    public function addListeners():void
    {
        addEventListener(Event.CLOSE, onClose);
        addEventListener(Event.CONNECT, onConnect);
        addEventListener(IOErrorEvent.IO_ERROR, onIOError);
        addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);

        addEventListener(DataEvent.DATA, onData);
    }

    //Various event handlers and code to deal with the two-second timer here

    protected function onConnectedTimer(e:TimerEvent):void
    {
        //I get this traced message, and no IOError is thrown
        trace("SENDING TEST");
        this.send(':::\0'); 
    }
}

0 个答案:

没有答案