【问题标题】:c# detecting disconnect from server with timerc# 使用计时器检测与服务器的断开连接
【发布时间】:2015-08-25 23:28:43
【问题描述】:

我有一个客户端类型的应用程序正在接收来自远程服务器的数据包。 时不时会发生这种情况,由于某种原因,服务器会断开我的连接。 有时我的 ISP 掉线等问题。

我一直在尝试捕捉这些异常并在谷歌上搜索答案,但最后每一个 指向“制作一个计时器并定期检查接收到的数据包。”

现在我有一个接收所有传入流量的函数。 每次收到数据包时都会执行此函数。

现在我的想法是创建一个函数,该函数将创建计时器,让我们说 50 秒超时。 该函数会在每次收到数据包时将定时器重置为 0 并重新启动。

如果计时器达到 50 秒,它将抛出错误“断开连接!”一些逻辑将遵循 如何重新连接。

现在我遇到的主要问题是......我无法“暂停”我的主要数据包接收功能。 我试图在另一个线程中创建它,但程序不断重新创建新线程,按 ID 杀死线程是一种不好的做法,而且我还没有走这条路……。

这是我应该如何处理我的问题还是有人有更好的主意? 下面是我的数据包接收功能。

 public void OnReceive()
        {
           try
            {
               recv_pack = locSec.TrIncom();
                if (recv_pack != null)
                {
                    foreach (Packet packet in recv_pack)
                    {                     
                        byte[] packet_bytes = packet.GetBytes();

                        PacketHandler.HandlePacket(packet, locSec);
                        //here i would check for packet receive with timer                  
                        //CheckDisconnect();
                    }
                }
            }
            catch() 
            {}
        }

到目前为止,我想出了这个:

public bool CheckDisconnect()
{
    bool KeepGoing = true;

    for(int i = 0 ; i <= 50 && KeepGoing; i++ )
    {
        Thead.Sleep(1000);

        if(i == 50)
        {
            KeepGoing = false;
            Console.WriteLine("Disconnected!");
            // ... starting reconnect procedure
        }
    }
}

【问题讨论】:

  • 您能更具体地说明您要解决的问题吗?似乎可能有一种不同的方法。
  • 你在用什么? TCP? UDP?什么更高级别的网络包(看起来你没有使用原始套接字)?
  • 正如@MichaelPerrenoud 提到的,这个问题似乎是XY-Problem - 我强烈建议您描述您试图用您的应用程序解决的实际问题!
  • 你所说的“暂停”是什么意思,直到那段我 100% 和你在一起(我刚刚写了相同的代码 - 又名看门狗)
  • 让我说得更具体一些。在财富 500 强公司中,延迟和成功至关重要,我们不用担心知道连接何时超时。我们担心的是我们能不能重试。消息是否持续重试?在真正失败之前有多少次?重试之间的时间间隔。我真的认为这就是你想要达到的目标。

标签: c# tcp packet


【解决方案1】:

不确定我是否完全理解,但如果这两个函数在同一个线程中,你不能只创建一个控制 OnReceive() 函数的全局变量并在你的 CheckDisconnect() 函数中将其设置为 false 吗?

【讨论】:

  • 现在这是一个绝妙的主意。用 5 行代码解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2014-07-01
相关资源
最近更新 更多