【问题标题】:AndroidAsync TCP -- proper way to detect socket is no longer available using write?AndroidAsync TCP - 检测套接字的正确方法不再可用写入?
【发布时间】:2016-05-25 04:13:15
【问题描述】:

我想知道在客户端检查使用 AndroidAsync 库打开的 TCP 套接字不再可用的正确方法是什么?这是在(普通 TCP,非 AndroidAsync)服务器未明确启动关闭套接字的情况下(因此未调用 ClosedCallback)。例如,当服务器冷重启时。

似乎DataCallback只有在服务器发回数据时才可用,不能用于接收错误信息。

我也觉得

Util.writeAll(socket, (byte[]) payload.array(), new CompletedCallback()
    {
        @Override
        public void onCompleted(Exception ex)
        {
            if (ex != null)
            {
                Log.e(TAG, "write failed with ex message= " + ex.getMessage());
                throw new RuntimeException(ex);
            }
        }
    });

也不抛出异常。

所以此时我不确定如何检测套接字不再可用,即使客户端定期向其写入数据。

【问题讨论】:

    标签: sockets tcp androidasync-koush


    【解决方案1】:

    如果你发送足够多的数据或调用它足够的次数,它会抛出一个IOexception。由于两端都有 TCP 缓冲,它不会在第一次调用时抛出。

    【讨论】:

    • 这是有道理的。但是,客户端是具有可视前端的服务器的远程控制器。当发送“足够”的数据/呼叫时,两者将长时间不同步,从而导致糟糕的用户体验。
    【解决方案2】:

    我最终实施了某种类似于“ping”的定期检查。客户端使用普通的 Java NIO 套接字调用(不使用 AndroidAsync)打开并立即关闭与同一端口的 TCP 连接。如果该超时,则假定连接已丢失,并且一旦再次成功,将进行恢复尝试。仅当应用程序具有焦点或刚刚唤醒时,才会执行此定期检查。这显然是一个远非理想的解决方法,但它似乎适合我的目的。

    【讨论】:

      【解决方案3】:

      你可以使用关闭/结束回调

      socket.setClosedCallback(new CompletedCallback()
      {
                  @Override
                  public void onCompleted(Exception ex)
                  {
      
                  }
              });
      
      socket.setEndCallback(new CompletedCallback()
      {
                  @Override
                  public void onCompleted(Exception ex)
                  {
      
                  }
       });
      

      【讨论】:

      • 很遗憾,该服务器不是 AndroidAsync 服务器,不会关闭连接以便调用回调。
      • 对不起,非AndroidAsync服务器是什么意思?即使使用 node.js,甚至是自定义 c++ tcp 服务器,当服务器死机时,我仍然会在客户端获得结束和关闭回调,我认为它与 AndroidAsync 没有任何关系,它更像是一个 tcp标准
      • 在我的环境中,除了从客户端和服务器的角度来看连接不再有效时(优雅地)关闭服务器之外,还有其他用例。因为服务器不是我实现/控制的 AndroidAsync 服务器,必须纯粹在客户端发现。
      猜你喜欢
      • 2014-06-05
      • 2013-05-25
      • 2018-12-16
      • 2012-02-10
      • 1970-01-01
      • 2010-10-14
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多