基本上我想要从代码块中捕获任何异常,然后解雇代码。
try {
CODE
catch (Exception e)
{
DO THIS ONCE
}
finally
{
CODE
}
深度
所以我一直在创建一个TCP / SOCKET服务器。哪个可以与多个客户端一起使用并发送/背诵(I / O)数据。它效果很好,现在已经很久了。但我在我的控制台中发现它说:
这很糟糕,因为如果它认为用户断开连接两次就会产生很多问题。我知道用户是否断开连接的方式是每隔200ms向他们发送数据。如果有错误然后打印,他们断开连接从客户端列表中删除它们,并断开流/ tcp。
static bool currentlyUsing;
private static void PingClient(Object o)
{
if (!currentlyUsing)
{
if (clientsConnected.Count != 0)
{
foreach (Client c in clientsConnected)
{
try
{
c.tcp.Client.Blocking = false;
c.tcp.Client.Send(new byte[1], 0, 0);
}
catch (Exception e)
{
currentlyUsing = true;
Console.WriteLine("[INFO] Client Dissconnected: IP:" + c.ip + " PORT:" + c.port.ToString() + " Reason:" + e.Message);
clientsConnected.Remove(c);
c.tcp.Close();
break;
}
finally
{
currentlyUsing = false;
}
GC.Collect();
}
}
}
有没有办法让它只捕获一次,或者多次捕获它但只激发我想要的代码一次?