c# udp socket timeout

在C#中使用UDP套接字时,您可以设置套接字的超时时间以确保套接字在一定时间内没有收到数据时会超时。在C#中,可以通过 Socket.ReceiveTimeout 属性来设置UDP套接字的超时时间。此属性指定套接字接收操作的超时时间(以毫秒为单位)。如果在超时时间内没有收到任何数据,则接收操作将失败并引发SocketException。

以下是使用C#设置UDP套接字超时的示例代码:

using System;
using System.Net;
using System.Net.Sockets;
class UdpSocketExample
    static void Main(string[] args)
        // 创建UDP套接字
        UdpClient client = new UdpClient();
        // 设置接收操作的超时时间为5秒
        client.Client.ReceiveTimeout = 5000;
        // 发送UDP数据包
        byte[] sendBytes = Encoding.ASCII.GetBytes("Hello, World!");
        client.Send(sendBytes, sendBytes.Length, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345));
            // 接收UDP数据包
            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
            byte[] receiveBytes = client.Receive(ref remoteEP);
            // 显示接收到的数据
            Console.WriteLine("Received {0} bytes from {1}: {2}", receiveBytes.Length, remoteEP.ToString(), Encoding.ASCII.GetString(receiveBytes));
        catch (SocketException ex)
            if (ex.SocketErrorCode == SocketError.TimedOut)
                // 接收超时
                Console.WriteLine("Receive operation timed out.");
                // 其他套接字错误
                Console.WriteLine("Socket error occurred: {0}", ex.Message);
        finally
            // 关闭套接字
            client.Close();

上面的示例代码设置了接收操作的超时时间为5秒。如果在5秒内没有接收到任何数据,Receive方法将引发SocketException,并且SocketException.SocketErrorCode属性将设置为SocketError.TimedOut,这表示接收操作已超时。

注意,即使设置了超时时间,UDP套接字仍然可以在没有超时的情况下等待无限期地接收数据。因此,您应该在代码中实现适当的错误处理和超时处理,以确保程序的可靠性和健壮性。

  •