UdpClient.EndReceive(IAsyncResult, IPEndPoint) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
結束暫止的非同步接收。
public:
cli::array <System::Byte> ^ EndReceive(IAsyncResult ^ asyncResult, System::Net::IPEndPoint ^ % remoteEP);
public byte[] EndReceive(IAsyncResult asyncResult, ref System.Net.IPEndPoint? remoteEP);
public byte[] EndReceive(IAsyncResult asyncResult, ref System.Net.IPEndPoint remoteEP);
member this.EndReceive : IAsyncResult * IPEndPoint -> byte[]
Public Function EndReceive (asyncResult As IAsyncResult, ByRef remoteEP As IPEndPoint) As Byte()
參數
- asyncResult
- IAsyncResult
IAsyncResult 物件,由對 BeginReceive(AsyncCallback, Object) 的呼叫傳回。
- remoteEP
- IPEndPoint
指定的遠端端點。
傳回
Byte[]
如果成功,即為包含資料包資料的位元組陣列。
例外狀況
asyncResult 為 null。
asyncResult 不會經由對 BeginReceive(AsyncCallback, Object) 方法的呼叫傳回。
嘗試存取基礎 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 方法。