在 C# 中,你可以使用 TcpClient
类来进行 TCP 连接的管理。你可以编写一个循环来尝试连接,以及检测连接是否正常。以下是一个简单的示例代码,演示如何实现这一功能:
using System;
using System.Net.Sockets;
using System.Threading;
class Program
{
static void Main(string[] args)
{
string serverAddress = "127.0.0.1"; // 服务器地址
int serverPort = 12345; // 服务器端口
while (true)
{
TcpClient client = new TcpClient();
try
{
// 尝试连接服务器
client.Connect(serverAddress, serverPort);
if (client.Connected)
{
Console.WriteLine("Connected to server.");
// 在这里可以进行你的数据交换操作
// ...
// 关闭连接
client.Close();
}
}
catch (Exception ex)
{
Console.WriteLine($"Failed to connect to server: {ex.Message}");
}
// 等待一段时间后尝试重新连接
Thread.Sleep(5000); // 5 秒钟
}
}
}
在这个示例中,程序将尝试连接指定的服务器地址和端口。如果连接成功,它会打印消息并在连接之后进行任何必要的数据交换操作,然后关闭连接。如果连接失败,它将打印错误消息并等待一段时间后再次尝试连接。
你可以根据需要调整连接的地址、端口以及连接失败后等待的时间。这个示例是一个简单的循环连接的示例,你可以根据实际需求进行进一步的扩展和优化
使用异步协程检测tcp连接
在C#中,你可以使用异步方法和async/await
关键字结合Task.Delay
来实现周期性连接检测。下面是一个示例代码,演示如何使用协程(通过异步方法)进行TCP连接的检测和周期性重连:
using System;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
string serverAddress = "127.0.0.1"; // 服务器地址
int serverPort = 12345; // 服务器端口
while (true)
{
try
{
using (TcpClient client = new TcpClient())
{
await client.ConnectAsync(serverAddress, serverPort);
if (client.Connected)
{
Console.WriteLine("Connected to server.");
// 在这里可以进行你的数据交换操作
// ...
// 关闭连接
client.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Failed to connect to server: {ex.Message}");
}
// 等待一段时间后尝试重新连接
await Task.Delay(5000); // 5 秒钟
}
}
}
在这个示例中,Main
方法被声明为异步方法,它使用async
关键字。在循环中,使用TcpClient
的ConnectAsync
方法进行异步连接。如果连接成功,它会打印消息并进行任何必要的数据交换操作,然后关闭连接。如果连接失败,它将打印错误消息。然后,使用Task.Delay
来等待一段时间,然后再次尝试连接。
这种方法避免了使用Thread.Sleep
来等待,而是使用了异步等待的方式,使得程序在等待连接时不会阻塞主线程,而是可以执行其他任务。