UdpClient.BeginReceive(AsyncCallback, Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Принимает датаграмму с удаленного узла в асинхронном режиме.
public:
IAsyncResult ^ BeginReceive(AsyncCallback ^ requestCallback, System::Object ^ state);
public IAsyncResult BeginReceive (AsyncCallback? requestCallback, object? state);
public IAsyncResult BeginReceive (AsyncCallback requestCallback, object state);
member this.BeginReceive : AsyncCallback * obj -> IAsyncResult
Public Function BeginReceive (requestCallback As AsyncCallback, state As Object) As IAsyncResult
Параметры
- requestCallback
- AsyncCallback
Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении данной операции.
- state
- Object
Пользовательский объект, содержащий информацию об операции приема. Этот объект передается делегату requestCallback
по завершении операции.
Возвращаемое значение
Объект IAsyncResult, который ссылается на асинхронный прием.
Примеры
В следующем примере кода используется BeginReceive для асинхронного получения ответа сервера.
private:
static int listenPort = 13000;
public:
value struct UdpState
{
public:
UdpClient^ udpClient;
IPEndPoint^ ipEndPoint;
};
static bool isMessageReceived;
static void ReceiveCallback(IAsyncResult^ asyncResult)
{
UdpClient^ udpClient =
((UdpState)(asyncResult->AsyncState)).udpClient;
IPEndPoint^ ipEndPoint =
((UdpState)(asyncResult->AsyncState)).ipEndPoint;
array<Byte>^ receiveBytes =
udpClient->EndReceive(asyncResult, ipEndPoint);
String^ receiveString =
Encoding::ASCII->GetString(receiveBytes);
Console::WriteLine("Received: {0}", receiveString);
isMessageReceived = true;
}
static void ReceiveMessages()
{
// Receive a message and write it to the console.
IPEndPoint^ ipEndPoint = gcnew IPEndPoint(IPAddress::Any, listenPort);
UdpClient^ udpClient = gcnew UdpClient(ipEndPoint);
UdpState^ udpState = gcnew UdpState();
udpState->ipEndPoint = ipEndPoint;
udpState->udpClient = udpClient;
Console::WriteLine("listening for messages");
udpClient->BeginReceive(gcnew AsyncCallback(ReceiveCallback),
udpState);
// Do some work while we wait for a message. For this example,
// we'll just sleep
while (!isMessageReceived)
{
Thread::Sleep(100);
}
}
public struct UdpState
{
public UdpClient u;
public IPEndPoint e;
}
public static bool messageReceived = false;
public static void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = ((UdpState)(ar.AsyncState)).u;
IPEndPoint e = ((UdpState)(ar.AsyncState)).e;
byte[] receiveBytes = u.EndReceive(ar, ref e);
string receiveString = Encoding.ASCII.GetString(receiveBytes);
Console.WriteLine($"Received: {receiveString}");
messageReceived = true;
}
public static void ReceiveMessages()
{
// Receive a message and write it to the console.
IPEndPoint e = new IPEndPoint(IPAddress.Any, s_listenPort);
UdpClient u = new UdpClient(e);
UdpState s = new UdpState();
s.e = e;
s.u = u;
Console.WriteLine("listening for messages");
u.BeginReceive(new AsyncCallback(ReceiveCallback), s);
// Do some work while we wait for a message. For this example, we'll just sleep
while (!messageReceived)
{
Thread.Sleep(100);
}
}
Комментарии
Асинхронная BeginReceive операция должна быть завершена путем вызова EndReceive метода . Как правило, метод вызывается делегатом requestCallback
.
Этот метод не блокируется до завершения операции. Чтобы заблокировать до завершения операции, используйте Receive метод .
Подробные сведения об использовании асинхронной модели программирования см. в разделе Асинхронный вызов синхронных методов.