在 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 秒钟
- }
- }
- }
在这个示例中,程序将尝试连接指定的服务器地址和端口。如果连接成功,它会打印消息并在连接之后进行任何必要的数据交换操作,然后关闭连接。如果连接失败,它将打印错误消息并等待一段时间后再次尝试连接。
你可以根据需要调整连接的地址、端口以及连接失败后等待的时间。这个示例是一个简单的循环连接的示例,你可以根据实际需求进行进一步的扩展和优化
在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
来等待,而是使用了异步等待的方式,使得程序在等待连接时不会阻塞主线程,而是可以执行其他任务。