C#异步定时判断TCP客户端连接服务器状态并且实现连接失败后重连
使用异步定时器可以实现定时判断TCP客户端连接服务器状态,同时可以使用try-catch语句实现连接失败后重连。以下是示例代码:
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
class TcpClientDemo
{
private TcpClient tcpClient;
private Timer timer;
private bool isConnected = false;
public TcpClientDemo()
{
tcpClient = new TcpClient();
timer = new Timer(new TimerCallback(TimerCallback), null, 0, 5000); // 每隔5秒执行一次TimerCallback
}
private void TimerCallback(object state)
{
if (!isConnected)
{
try
{
tcpClient.Connect(IPAddress.Parse("127.0.0.1"), 8888);
isConnected = true;
Console.WriteLine("Connected to server.");
}
catch (Exception ex)
{
Console.WriteLine("Failed to connect to server: {0}", ex.Message);
}
}
else
{
try
{
if (!tcpClient.Client.Poll(0, SelectMode.SelectRead))
{
isConnected = false;
tcpClient.Client.Close();
Console.WriteLine("Lost connection to server.");
}
}
catch (Exception ex)
{
Console.WriteLine("Failed to check connection status: {0}", ex.Message);
}
}
}
}
在上面的代码中,我们使用了TcpClient类和Timer类。在构造函数中,我们创建了一个TcpClient实例和一个Timer实例,并且将TimerCallback方法作为回调函数传递给了Timer实例,每隔5秒执行一次。在TimerCallback方法中,我们首先判断是否已经连接上了服务器,如果没有连接,则尝试连接服务器;如果已经连接,则使用TcpClient.Client.Poll方法检查连接状态,如果连接断开了,则将isConnected标记为false,并且关闭TcpClient实例,然后输出Lost connection to server的消息。
注意,在使用TcpClient.Connect方法连接服务器时,如果连接失败,则会抛出SocketException异常,我们可以在catch语句中捕获这个异常,并且输出Failed to connect to server的消息。在使用TcpClient.Client.Poll方法检查连接状态时,如果连接已经断开,则TcpClient.Client.Poll方法会返回false,并且可以使用TcpClient.Client.Close方法关闭连接。如果TcpClient实例已经关闭,则TcpClient.Client.Poll方法会抛出ObjectDisposedException异常,我们也可以在catch语句中捕获这个异常,并且输出Failed to check connection status的消息
原文地址: https://www.cveoy.top/t/topic/g04D 著作权归作者所有。请勿转载和采集!