在 Flex 应用程序(不是 AIR,而是 Flash 播放器)中,我有一个 XMLSocket 正在运行,而且我终其一生都无法弄清楚如何检测客户端断开连接。如,当我从我的计算机连接到远程服务器,然后断开计算机与互联网的连接时,套接字认为它仍然连接(没有 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');
}
}