Socket.ReceiveMessageFromAsync 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
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
參數
SocketAsyncEventArgs 物件,用於這個非同步通訊端作業。
傳回
若 I/O 作業暫止,則為 true
。 作業完成時會引發與 e
參數有關的 Completed 事件。
若 I/O 作業同步完成,則為 false
。 在這個情況下,就不會引發與 e
參數有關的 Completed 事件,而在方法呼叫傳回後會立即檢查做為參數傳遞的 e
物件,以擷取作業的結果。
例外狀況
RemoteEndPoint 不可以是 null。
嘗試存取通訊端時發生錯誤。
備註
方法 ReceiveMessageFromAsync 主要用於接收無連線套接字上的訊息數據。 必須知道套接字的本機位址。 這個方法只能與數據報和原始套接字搭配使用。 套接字必須在呼叫這個方法之前,使用設定為 Dgram 或 Raw 的套接字類型來初始化。 使用 建構套接字時,即可完成此作業 Socket。
呼叫端必須將 屬性設定 SocketAsyncEventArgs.RemoteEndPoint 為 EndPoint 與遠端主機端點相同類型的 。 成功接收至實際遠端端端點時,屬性將會更新。
需要物件上的 System.Net.Sockets.SocketAsyncEventArgs 下列屬性和事件,才能成功呼叫這個方法:
呼叫端可以在呼叫 ReceiveMessageFromAsync 方法之前,將 屬性設定SocketAsyncEventArgs.UserToken為任何所需的用戶狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保存為成員。
針對訊息導向套接字,傳入的訊息會放入緩衝區中,最多可達緩衝區的總大小。 SocketAsyncEventArgs.Count和 SocketAsyncEventArgs.Offset 屬性會決定在緩衝區中放置數據的位置,以及數據量。
方法ReceiveMessageFromAsync會在第一次針對指定的Socket呼叫時,自動將套接字選項true
設定PacketInformation為 。 不過, IPPacketInformation 物件只有在設定套接字選項之後抵達本機計算機的封包才有效。 如果套接字系結至本機端點時,在 兩者之間傳送封包 (由方法明確 Bind (,或由其中一個 Connect、 ConnectAsync、 SendTo或 SendToAsync) 方法隱含地傳送至 方法,則ReceiveMessageFromAsyncReceiveMessageFromAsync呼叫 方法會導致這些封包的無效IPPacketInformation物件。
為了確保所有 IPPacketInformation 物件都有效,應用程式應該先將套接字選項設定 PacketInformation 為true
,再使用 SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) 方法系結至本機端點。
如果應用程式需要使用單播、多播或廣播位址來傳送數據報,就可以檢查產生的 IPPacketInformation 物件。
另請參閱
適用於
ReceiveMessageFromAsync(ArraySegment<Byte>, EndPoint)
接收數據,並傳回訊息寄件者的其他資訊。
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 其中包含接收的位元組數目,以及傳送主機的其他資訊。
例外狀況
remoteEndPoint
為 null
。
您必須先呼叫 Bind 方法,才能執行這項作業。
適用於
ReceiveMessageFromAsync(ArraySegment<Byte>, SocketFlags, EndPoint)
接收數據,並傳回訊息寄件者的其他資訊。
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 其中包含接收的位元組數目,以及傳送主機的其他資訊。
例外狀況
remoteEndPoint
為 null
。
您必須先呼叫 Bind 方法,才能執行這項作業。
適用於
ReceiveMessageFromAsync(Memory<Byte>, EndPoint, CancellationToken)
接收數據,並傳回訊息寄件者的其他資訊。
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)
參數
- remoteEndPoint
- EndPoint
與遠端主機端點相同類型的端點。
- cancellationToken
- CancellationToken
可用來通知應該取消非同步作業的取消權杖。
傳回
異步工作, SocketReceiveMessageFromResult 其中包含接收的位元組數目,以及傳送主機的其他資訊。
例外狀況
remoteEndPoint
為 null
。
您必須先呼叫 Bind 方法,才能執行這項作業。
取消標記已取消。 此例外狀況會儲存在傳回的工作中。
適用於
ReceiveMessageFromAsync(Memory<Byte>, SocketFlags, EndPoint, CancellationToken)
接收數據,並傳回訊息寄件者的其他資訊。
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)
參數
- socketFlags
- SocketFlags
SocketFlags 值的位元組合,將在接收數據時使用。
- remoteEndPoint
- EndPoint
與遠端主機端點相同類型的端點。
- cancellationToken
- CancellationToken
可用來通知應該取消非同步作業的取消權杖。
傳回
異步工作, SocketReceiveMessageFromResult 其中包含接收的位元組數目,以及傳送主機的其他資訊。
例外狀況
remoteEndPoint
為 null
。
您必須先呼叫 Bind 方法,才能執行這項作業。
取消標記已取消。 此例外狀況會儲存在傳回的工作中。