UdpClient.BeginReceive(AsyncCallback, Object) Método

Definição

Recebe um datagrama de um host remoto de forma assíncrona.Receives a datagram from a remote host asynchronously.

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

Parâmetros

requestCallback
AsyncCallback

Um delegado AsyncCallback que faz referência ao método a ser invocado quando a operação é concluída.An AsyncCallback delegate that references the method to invoke when the operation is complete.

state
Object

Um objeto definido pelo usuário que contém informações sobre a operação de recebimento.A user-defined object that contains information about the receive operation. Esse objeto é passado para o delegado requestCallback quando a operação é concluída.This object is passed to the requestCallback delegate when the operation is complete.

Retornos

IAsyncResult

Um objeto IAsyncResult que referencia o recebimento assíncrono.An IAsyncResult object that references the asynchronous receive.

Exemplos

O exemplo de código a seguir usa BeginReceive para receber uma resposta do servidor de forma assíncrona.The following code example uses BeginReceive to asynchronously receive a server response.

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

Comentários

A operação assíncrona BeginReceive deve ser concluída chamando o EndReceive método.The asynchronous BeginReceive operation must be completed by calling the EndReceive method. Normalmente, o método é invocado pelo requestCallback delegado.Typically, the method is invoked by the requestCallback delegate.

Este método não é bloqueado até que a operação seja concluída.This method does not block until the operation is complete. Para bloquear até que a operação seja concluída, use o Receive método.To block until the operation is complete, use the Receive method.

Para obter informações detalhadas sobre como usar o modelo de programação assíncrona, consulte chamando métodos síncronos de formaassíncrona.For detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously.

Aplica-se a