【问题标题】:SIP TCP Channel with SIP Sorcery带有 SIP 魔法的 SIP TCP 通道
【发布时间】:2014-01-29 13:43:53
【问题描述】:

如何使用 SipSorcery 将 TCP 连接设置为 KeepAlive? 正如我在跟踪中看到的,我的客户端和服务器之间的连接在 30 秒后发送了一个 [FIN, ACK] 数据包。

我需要让我的连接保持活动状态,以便订阅电话事件。

我的 TCP 通道的一些代码示例:

    SIPTCPChannel channel_Tcp = new SIPTCPChannel(localEndPoint);
    Transport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine());
    Transport.AddSIPChannel(channel_Tcp);

一切正常,直到我的连接被 FIN ACK 关闭。

【问题讨论】:

    标签: c# tcp sip tcpclient


    【解决方案1】:

    通常在连接上发送几个空字节就足以保持连接打开。很可能是您自己的路由器关闭了 TCP 连接,只要它看到某种流量流出,它就应该停止。

    static void Main(string[] args)
    {
        SIPTCPChannel channel_Tcp = new SIPTCPChannel(new IPEndPoint(IPAddress.Any, 5060));
        var Transport = new SIPTransport(SIPDNSManager.ResolveSIPService, new SIPTransactionEngine());
        Transport.AddSIPChannel(channel_Tcp);
    
        IPEndPoint sipServerEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 5060);
        Timer keepAliveTimer = new Timer(30000);
    
        keepAliveTimer.Elapsed += (sender, e) =>
        {
            // If the TCP channel still has a connection to the SIP server socket then send a dummy keep-alive packet.
            if(channel_Tcp.IsConnectionEstablished(sipServerEndPoint))
            {
                channel_Tcp.Send(sipServerEndPoint, new byte[] { 0x00, 0x00, 0x00, 0x00 });
            }
            else
            {
                keepAliveTimer.Enabled = false;
            }
        };
    
        keepAliveTimer.Enabled = true;
    }
    

    【讨论】:

    • 这似乎不起作用:-(当我跟踪会话时,我的客户端发送一个 [PSH, ACK] 然后服务器回答 [ACK]。但连接仍然在之后关闭从初始连接开始 30 秒。SipSorcery PruneConnections 在这里有什么影响吗?也许是某种被触发的计时器??
    • 修剪机制只会在 70 分钟内没有发送或接收任何内容时关闭连接,所以这不是原因。在您的跟踪中,您是否看到发送了 4 字节保持活动数据包?尝试将时间更改为 15 秒而不是 30 秒,看看是否有帮助。
    • 不幸的是,更改经过的时间没有任何效果。如果我在wireshark 上的过滤器中执行tcp.analysis.keep_alive,我什么也看不到。当 channel_Tcp.Send() 被抛出时,我看到的唯一数据包是客户端 > 服务器 [PSH, ACK] Len = 4,之后,服务器 > 客户端 [ACK] Len = 0。
    • 总结这个问题,我认为我的问题是我的远程服务器,它有一个设置会在计时器后终止我的连接。如果我从服务器的 REGISTER 开始,那么它不会终止 TCP 连接。感谢您的输入@sipwiz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多