Прочитать на английском

Поделиться через


UdpClient.EndReceive(IAsyncResult, IPEndPoint) Метод

Определение

Завершает отложенный асинхронный прием.

public byte[] EndReceive(IAsyncResult asyncResult, ref System.Net.IPEndPoint? remoteEP);
public byte[] EndReceive(IAsyncResult asyncResult, ref System.Net.IPEndPoint remoteEP);

Параметры

asyncResult
IAsyncResult

Объект IAsyncResult, возвращаемый при вызове объекта BeginReceive(AsyncCallback, Object).

remoteEP
IPEndPoint

Заданная удаленная конечная точка.

Возвращаемое значение

Byte[]

В случае успешного выполнения массив байтов, который содержит данные датаграммы.

Исключения

asyncResult имеет значение null.

Параметр asyncResult не был возвращен вызовом метода BeginReceive(AsyncCallback, Object).

Метод EndReceive(IAsyncResult, IPEndPoint) был ранее вызван для асинхронного чтения.

Произошла ошибка при попытке доступа к основному объекту Socket.

Основной объект Socket закрыт.

Примеры

В следующем примере кода используется BeginSend для завершения асинхронного получения ответа сервера.

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);
    }
}

Комментарии

Этот метод блокируется до завершения операции.

Чтобы выполнить эту операцию синхронно, используйте Receive метод .

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1