溫馨提示×

c# beginreceive能設置超時時間嗎

c#
小樊
134
2024-12-04 07:21:51
欄目: 編程語言

是的,在C#中,BeginReceive方法可以設置超時時間。為了實現這個功能,您需要使用Socket類的SetSocketOption方法來設置SocketOptionName.ReceiveTimeout選項。以下是一個示例:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
        int port = 12345;

        using (Socket socket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
        {
            socket.Connect(ipAddress, port);

            // 設置接收超時時間(單位:毫秒)
            int receiveTimeout = 5000;
            socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, receiveTimeout);

            byte[] buffer = new byte[1024];
            IAsyncResult result = socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, null);

            // 檢查是否在超時時間內接收到數據
            if (result.AsyncWaitHandle.WaitOne(receiveTimeout, true))
            {
                int bytesReceived = socket.EndReceive(result);
                string receivedData = Encoding.UTF8.GetString(buffer, 0, bytesReceived);
                Console.WriteLine("Received data: " + receivedData);
            }
            else
            {
                Console.WriteLine("Receive operation timed out.");
            }
        }
    }
}

在這個示例中,我們首先創建一個Socket對象并連接到指定的IP地址和端口。然后,我們使用SetSocketOption方法設置接收超時時間為5000毫秒(5秒)。接下來,我們使用BeginReceive方法開始接收數據,并使用AsyncWaitHandle.WaitOne方法檢查是否在超時時間內接收到數據。如果在超時時間內接收到數據,我們使用EndReceive方法結束接收操作并處理接收到的數據。如果未在超時時間內接收到數據,我們將輸出一條超時消息。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女