繁体   English   中英

C#使用计时器检测与服务器的断开连接

[英]c# detecting disconnect from server with timer

我有一个客户端类型的应用程序正在接收来自远程服务器的数据包。 有时候,由于某种原因,服务器断开了我的连接。 有时我的终端上会有一些问题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
        }
    }
}

不知道我是否完全理解,但是如果这两个函数在同一个线程中,您是否不能仅制作一个控制OnReceive()函数的全局变量并将其在CheckDisconnect()函数中设置为false?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM