C#使用计时器检测与服务器的断开连接
c# detecting disconnect from server with timer
我有一个客户端类型的应用程序正在从远程服务器接收数据包。
时不时地,由于某种原因,服务器断开了我的连接。
有时我这边的 ISP 会掉线等问题
我一直在尝试捕捉这些异常并在谷歌上搜索答案,但最后每一个
指向 "make a timer and check periodically for received packets."
现在我有一个功能可以接收所有传入的流量。
每次收到数据包时都会执行此函数。
现在我的想法是创建一个函数,该函数将创建超时时间为 50 秒的计时器。
每次收到数据包时,此函数都会将计时器重置为 0 并重新启动它。
如果计时器达到 50 秒,它将抛出错误 "disconnected!" 并且将遵循一些逻辑
如何重新连接。
现在我的主要问题是...我无法"pause" 我的主要数据包接收功能。
我试图在另一个线程中创建它,但程序不断重新创建新线程,按 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 ?
我有一个客户端类型的应用程序正在从远程服务器接收数据包。 时不时地,由于某种原因,服务器断开了我的连接。 有时我这边的 ISP 会掉线等问题
我一直在尝试捕捉这些异常并在谷歌上搜索答案,但最后每一个 指向 "make a timer and check periodically for received packets."
现在我有一个功能可以接收所有传入的流量。 每次收到数据包时都会执行此函数。
现在我的想法是创建一个函数,该函数将创建超时时间为 50 秒的计时器。 每次收到数据包时,此函数都会将计时器重置为 0 并重新启动它。
如果计时器达到 50 秒,它将抛出错误 "disconnected!" 并且将遵循一些逻辑 如何重新连接。
现在我的主要问题是...我无法"pause" 我的主要数据包接收功能。 我试图在另一个线程中创建它,但程序不断重新创建新线程,按 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 ?