Socket.ReceiveMessageFromAsync 方法

定義

多載

ReceiveMessageFromAsync(SocketAsyncEventArgs)

使用指定的 SocketFlags,開始以非同步方式將指定之位元組數目的資料,接收至資料緩衝區的指定位置,並儲存端點和封包資訊。

ReceiveMessageFromAsync(ArraySegment<Byte>, EndPoint)

接收資料,並傳回訊息寄件者的其他資訊。

ReceiveMessageFromAsync(ArraySegment<Byte>, SocketFlags, EndPoint)

接收資料,並傳回訊息寄件者的其他資訊。

ReceiveMessageFromAsync(Memory<Byte>, EndPoint, CancellationToken)

接收資料,並傳回訊息寄件者的其他資訊。

ReceiveMessageFromAsync(Memory<Byte>, SocketFlags, EndPoint, CancellationToken)

接收資料,並傳回訊息寄件者的其他資訊。

ReceiveMessageFromAsync(SocketAsyncEventArgs)

來源:
Socket.cs
來源:
Socket.cs
來源:
Socket.cs

使用指定的 SocketFlags,開始以非同步方式將指定之位元組數目的資料,接收至資料緩衝區的指定位置,並儲存端點和封包資訊。

public:
 bool ReceiveMessageFromAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ReceiveMessageFromAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.ReceiveMessageFromAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ReceiveMessageFromAsync (e As SocketAsyncEventArgs) As Boolean

參數

e
SocketAsyncEventArgs

SocketAsyncEventArgs 物件,用於這個非同步通訊端作業。

傳回

若 I/O 作業暫止,則為 true。 作業完成時會引發與 e 參數有關的 Completed 事件。

若 I/O 作業同步完成,則為 false。 在這個情況下,就不會引發與 e 參數有關的 Completed 事件,而在方法呼叫傳回後會立即檢查做為參數傳遞的 e 物件,以擷取作業的結果。

例外狀況

RemoteEndPoint 不可以是 null。

嘗試存取通訊端時發生錯誤。

備註

方法 ReceiveMessageFromAsync 主要用於接收無連線通訊端上的訊息資料。 必須知道通訊端的本機位址。 這個方法只能與資料包和原始通訊端搭配使用。 通訊端必須在呼叫這個方法之前,使用設定為 DgramRaw 的通訊端類型來初始化。 使用 建構通訊端時,即可完成此作業 Socket

呼叫端必須將 屬性設定 SocketAsyncEventArgs.RemoteEndPointEndPoint 與遠端主機端點相同類型的 。 成功接收至實際遠端端點時,屬性將會更新。

需要物件上的 System.Net.Sockets.SocketAsyncEventArgs 下列屬性和事件,才能成功呼叫這個方法:

呼叫端可以在呼叫 ReceiveMessageFromAsync 方法之前,將 屬性設定 SocketAsyncEventArgs.UserToken 為任何所需的使用者狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保存為成員。

針對訊息導向通訊端,傳入的訊息會放入緩衝區中,最多可達緩衝區的總大小。 SocketAsyncEventArgs.CountSocketAsyncEventArgs.Offset 屬性會決定在緩衝區中放置資料的位置,以及資料量。

方法 ReceiveMessageFromAsync 會在第一次針對指定的 Socket 呼叫時,自動將通訊端選項 true 設定 PacketInformation 為 。 不過, IPPacketInformation 物件只有在設定通訊端選項之後抵達本機電腦的封包才有效。 如果通訊端系結至本機端點時,在 兩者之間傳送封包 (由 方法明確 Bind (,或由其中一個 ConnectConnectAsyncSendToSendToAsync) 方法隱含地傳送至 方法,則 ReceiveMessageFromAsyncReceiveMessageFromAsync 呼叫 方法會導致這些封包的無效 IPPacketInformation 物件。

為了確保所有 IPPacketInformation 物件都有效,應用程式應該先將通訊端選項設定 PacketInformationtrue ,再使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法系結至本機端點。

如果應用程式需要使用單播、多播或廣播位址來傳送資料包,就可以檢查產生的 IPPacketInformation 物件。

另請參閱

適用於

ReceiveMessageFromAsync(ArraySegment<Byte>, EndPoint)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs

接收資料,並傳回訊息寄件者的其他資訊。

public:
 System::Threading::Tasks::Task<System::Net::Sockets::SocketReceiveMessageFromResult> ^ ReceiveMessageFromAsync(ArraySegment<System::Byte> buffer, System::Net::EndPoint ^ remoteEndPoint);
public System.Threading.Tasks.Task<System.Net.Sockets.SocketReceiveMessageFromResult> ReceiveMessageFromAsync (ArraySegment<byte> buffer, System.Net.EndPoint remoteEndPoint);
member this.ReceiveMessageFromAsync : ArraySegment<byte> * System.Net.EndPoint -> System.Threading.Tasks.Task<System.Net.Sockets.SocketReceiveMessageFromResult>
Public Function ReceiveMessageFromAsync (buffer As ArraySegment(Of Byte), remoteEndPoint As EndPoint) As Task(Of SocketReceiveMessageFromResult)

參數

buffer
ArraySegment<Byte>

所接收資料的緩衝區。

remoteEndPoint
EndPoint

與遠端主機端點相同類型的端點。

傳回

非同步工作, SocketReceiveMessageFromResult 其中包含接收的位元組數目,以及傳送主機的其他資訊。

例外狀況

Socket物件已關閉。

remoteEndPointnull

您必須先呼叫 Bind 方法,才能執行這項作業。

適用於

ReceiveMessageFromAsync(ArraySegment<Byte>, SocketFlags, EndPoint)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs

接收資料,並傳回訊息寄件者的其他資訊。

public:
 System::Threading::Tasks::Task<System::Net::Sockets::SocketReceiveMessageFromResult> ^ ReceiveMessageFromAsync(ArraySegment<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEndPoint);
public System.Threading.Tasks.Task<System.Net.Sockets.SocketReceiveMessageFromResult> ReceiveMessageFromAsync (ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEndPoint);
member this.ReceiveMessageFromAsync : ArraySegment<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> System.Threading.Tasks.Task<System.Net.Sockets.SocketReceiveMessageFromResult>
Public Function ReceiveMessageFromAsync (buffer As ArraySegment(Of Byte), socketFlags As SocketFlags, remoteEndPoint As EndPoint) As Task(Of SocketReceiveMessageFromResult)

參數

buffer
ArraySegment<Byte>

所接收資料的緩衝區。

socketFlags
SocketFlags

SocketFlags 值的位元組合,將在接收資料時使用。

remoteEndPoint
EndPoint

與遠端主機端點相同類型的端點。

傳回

非同步工作, SocketReceiveMessageFromResult 其中包含接收的位元組數目,以及傳送主機的其他資訊。

例外狀況

Socket物件已關閉。

remoteEndPointnull

您必須先呼叫 Bind 方法,才能執行這項作業。

適用於

ReceiveMessageFromAsync(Memory<Byte>, EndPoint, CancellationToken)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs

接收資料,並傳回訊息寄件者的其他資訊。

public System.Threading.Tasks.ValueTask<System.Net.Sockets.SocketReceiveMessageFromResult> ReceiveMessageFromAsync (Memory<byte> buffer, System.Net.EndPoint remoteEndPoint, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveMessageFromAsync : Memory<byte> * System.Net.EndPoint * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.SocketReceiveMessageFromResult>
Public Function ReceiveMessageFromAsync (buffer As Memory(Of Byte), remoteEndPoint As EndPoint, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of SocketReceiveMessageFromResult)

參數

buffer
Memory<Byte>

所接收資料的緩衝區。

remoteEndPoint
EndPoint

與遠端主機端點相同類型的端點。

cancellationToken
CancellationToken

可用來通知應該取消非同步作業的取消權杖。

傳回

非同步工作, SocketReceiveMessageFromResult 其中包含接收的位元組數目,以及傳送主機的其他資訊。

例外狀況

Socket物件已關閉。

remoteEndPointnull

您必須先呼叫 Bind 方法,才能執行這項作業。

解除標記已取消。 此例外狀況會儲存在傳回的工作中。

適用於

ReceiveMessageFromAsync(Memory<Byte>, SocketFlags, EndPoint, CancellationToken)

來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs
來源:
Socket.Tasks.cs

接收資料,並傳回訊息寄件者的其他資訊。

public System.Threading.Tasks.ValueTask<System.Net.Sockets.SocketReceiveMessageFromResult> ReceiveMessageFromAsync (Memory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEndPoint, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveMessageFromAsync : Memory<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<System.Net.Sockets.SocketReceiveMessageFromResult>
Public Function ReceiveMessageFromAsync (buffer As Memory(Of Byte), socketFlags As SocketFlags, remoteEndPoint As EndPoint, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of SocketReceiveMessageFromResult)

參數

buffer
Memory<Byte>

所接收資料的緩衝區。

socketFlags
SocketFlags

SocketFlags 值的位元組合,將在接收資料時使用。

remoteEndPoint
EndPoint

與遠端主機端點相同類型的端點。

cancellationToken
CancellationToken

可用來通知應該取消非同步作業的取消權杖。

傳回

非同步工作, SocketReceiveMessageFromResult 其中包含接收的位元組數目,以及傳送主機的其他資訊。

例外狀況

Socket物件已關閉。

remoteEndPointnull

您必須先呼叫 Bind 方法,才能執行這項作業。

解除標記已取消。 此例外狀況會儲存在傳回的工作中。

適用於