C# tcp通信连接正常判断

时间:2024-03-18 15:49:33

在 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关键字。在循环中,使用TcpClientConnectAsync方法进行异步连接。如果连接成功,它会打印消息并进行任何必要的数据交换操作,然后关闭连接。如果连接失败,它将打印错误消息。然后,使用Task.Delay来等待一段时间,然后再次尝试连接。

这种方法避免了使用Thread.Sleep来等待,而是使用了异步等待的方式,使得程序在等待连接时不会阻塞主线程,而是可以执行其他任务。