Language

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 を使用して、サーバーの応答を非同期的に受信します。

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 メソッドを使用します。

非同期プログラミング モデルの使用の詳細については、「非同期メソッドの 呼び出し」を参照してください。

適用対象