与KX-NCP1000 PABX交谈

时间:2014-08-12 03:03:03

标签: c# tcpclient pabx

我可以建立到PABX的TCP连接。它提示我可以登录,并收到一些通话记录。但是不久之后,PABX就无缘无故地放下了连接。它肯定得到了ACK,我查看了Wireshark。

this related question CharlesO说

  

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

     

已成功完成Avaya,Panasonic和其他PABX   产品

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

1 个答案:

答案 0 :(得分: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;
    }
  }

还需要处理冗余呼叫日志,因为在重新建立连接时通常会重复这些日志。