Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 ActionScript中的套接字连接关闭事件_Actionscript 3_Sockets - Fatal编程技术网

Actionscript 3 ActionScript中的套接字连接关闭事件

Actionscript 3 ActionScript中的套接字连接关闭事件,actionscript-3,sockets,Actionscript 3,Sockets,有人知道为什么在我断开wifi连接后关闭事件没有发送吗?或确定连接是否处于活动状态的任何方法。来自文档: Dispatched when the server closes the socket connection. 服务器通过发送FIN数据包并等待ACK来关闭连接。如我所见,您只需放下wifi,远程服务器就没有机会发送FIN。来自文档: Dispatched when the server closes the socket connection. 服务器通过发送FIN数据包并等待ACK

有人知道为什么在我断开wifi连接后关闭事件没有发送吗?或确定连接是否处于活动状态的任何方法。

来自文档:

Dispatched when the server closes the socket connection.
服务器通过发送FIN数据包并等待ACK来关闭连接。如我所见,您只需放下wifi,远程服务器就没有机会发送FIN。

来自文档:

Dispatched when the server closes the socket connection.

服务器通过发送FIN数据包并等待ACK来关闭连接。如我所见,您只需放下wifi,远程服务器就没有机会发送FIN。

不确定您是否需要间接关闭它,但我在关闭回调中确实关闭了它

_socket.addEventListener(Event.CLOSE, onClose);

private function onClose(e:Event):void {
  _socket.close();
}
您还可以在连接期间进行测试,以确保它尚未连接

if( !_socket.connected ){
  try {
    _socket.connect(host, port);
    this.dispatchEvent( new Event( 'CONNECTING' ) );
  } catch (e:Error) {
    _socket.close();
    this.dispatchEvent( new Event( 'ERROR' ) );
  }
}
[编辑] 当与服务器的连接断开时,不会触发连接关闭事件,如果要重新连接,必须对此进行测试。 为此,您需要设置一个计时器来轮询连接。以下类别将继续对插座进行极性连接,如果发现插座未连接,将尝试重新连接。 我剥离并删除了发送函数和非相关信息。 正如你所看到的,我有一个定时器,可以将插座极化,并且在多次重试后也会超时。 如果套接字关闭,该类将尝试使其保持活动状态。 显然,您需要分配端口和主机


我不确定你是否需要直接关闭它,但我在关闭回调时确实需要关闭它

_socket.addEventListener(Event.CLOSE, onClose);

private function onClose(e:Event):void {
  _socket.close();
}
您还可以在连接期间进行测试,以确保它尚未连接

if( !_socket.connected ){
  try {
    _socket.connect(host, port);
    this.dispatchEvent( new Event( 'CONNECTING' ) );
  } catch (e:Error) {
    _socket.close();
    this.dispatchEvent( new Event( 'ERROR' ) );
  }
}
[编辑] 当与服务器的连接断开时,不会触发连接关闭事件,如果要重新连接,必须对此进行测试。 为此,您需要设置一个计时器来轮询连接。以下类别将继续对插座进行极性连接,如果发现插座未连接,将尝试重新连接。 我剥离并删除了发送函数和非相关信息。 正如你所看到的,我有一个定时器,可以将插座极化,并且在多次重试后也会超时。 如果套接字关闭,该类将尝试使其保持活动状态。 显然,您需要分配端口和主机


理解。有没有办法知道我断开了?好吧,你不能。操作系统应该在超时后关闭连接,但这是一个平台specific@Yuras是的,请看我编辑的答案。而且它不是特定于平台的。您需要通过连接套接字来确定连接状态。有没有办法知道我断开了?好吧,你不能。操作系统应该在超时后关闭连接,但这是一个平台specific@Yuras是的,请看我编辑的答案。而且它不是特定于平台的。您需要通过连接插座来确定连接状态。断开wifi连接后,“已连接”属性保持为真,并且“关闭”事件根本不会触发。这是不可能的。发布你正在做的所有与插座相关的事情的代码。好的,我知道你的问题是什么,我会为你更新我的答案。shortlyok为你发布了一个课程,让你了解如何对连接的插座进行极性和测试。记住,此极性设置为1秒间隔,然后重新连接过程将花费一秒或两秒的时间。。。你在做一些奇怪的事。。。假设已经建立了连接,因此调用了onConnect,并且this.connected设置为true。在wifi连接关闭之后。onClose不会被调用,因此this.connected将保持为true,myConnect将不执行任何操作。在我断开wifi连接后,connected属性保持为true,并且关闭事件根本不会触发。这是不可能的。发布你正在做的所有与插座相关的事情的代码。好的,我知道你的问题是什么,我会为你更新我的答案。shortlyok为你发布了一个课程,让你了解如何对连接的插座进行极性和测试。记住,此极性设置为1秒间隔,然后重新连接过程将花费一秒或两秒的时间。。。你在做一些奇怪的事。。。假设已经建立了连接,因此调用了onConnect,并且this.connected设置为true。在wifi连接关闭之后。不会调用onClose,因此this.connected将保持为true,myConnect将不执行任何操作。