0

我可以建立到 PABX 的 TCP 连接。它提示我可以登录,并接收一些通话记录。但不久之后,PABX 无缘无故地断开了连接,我无法理解。它肯定会收到 ACK,我用 Wireshark 检查过。

这个相关的问题中,CharlesO 说

您只需编写一个 TCP 侦听器来接受来自 PBX 的连接并解析传入的呼叫详细记录 (CDR)。

已通过 Avaya、Panasonic 和其他 PABX 产品成功地做到了这一点

这是否意味着问题仅仅是设计是“不要打电话给我们,我们会打电话给你”?

4

1 回答 1

0

嗅探 PABX 和商业呼叫记录器之间的流量会发现 PABX 经常无缘无故地断开连接,任何希望记录呼叫数据的应用程序都必须监视连接状态。

由于 TcpClient 在写入失败之前不会检测到状态的变化,并且这严格来说是一个监听套接字,因此需要一种更直接的连接状态方法:

  public static class Extensions
  {
    /// <summary>
    /// Obtain the current state of the socket underpinning a TcpClient.
    /// Unlike TcpClient.Connected this is reliable and does not require 
    /// capture of an exception resulting from a failed socket write.
    /// </summary>
    /// <param name="tcpClient">TcpClient instance</param>
    /// <returns>Current state of the TcpClient.Client socket</returns>
    public static TcpState GetState(this TcpClient tcpClient)
    {
      var foo = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()
        .SingleOrDefault(x => x.LocalEndPoint.Equals(tcpClient.Client.LocalEndPoint));
      return foo != null ? foo.State : TcpState.Unknown;
    }
  }

处理冗余呼叫日志也是必要的,因为在重新建立连接时这些经常重复。

于 2014-08-18T15:04:03.210 回答