是的,在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
方法結束接收操作并處理接收到的數據。如果未在超時時間內接收到數據,我們將輸出一條超時消息。