[英]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.