Socket.ReceiveAsync 方法

定義

多載

ReceiveAsync(ArraySegment<Byte>)

從已連線的通訊端擷取資料。

ReceiveAsync(IList<ArraySegment<Byte>>)

從已連線的通訊端擷取資料。

ReceiveAsync(SocketAsyncEventArgs)

開始非同步要求,以接收來自已連接的 Socket 物件的資料。

ReceiveAsync(ArraySegment<Byte>, SocketFlags)

從已連線的通訊端擷取資料。

ReceiveAsync(IList<ArraySegment<Byte>>, SocketFlags)

從已連線的通訊端擷取資料。

ReceiveAsync(Memory<Byte>, CancellationToken)

從已連線的通訊端擷取資料。

ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken)

從已連線的通訊端擷取資料。

ReceiveAsync(ArraySegment<Byte>)

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

從已連線的通訊端擷取資料。

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(ArraySegment<System::Byte> buffer);
public System.Threading.Tasks.Task<int> ReceiveAsync (ArraySegment<byte> buffer);
member this.ReceiveAsync : ArraySegment<byte> -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffer As ArraySegment(Of Byte)) As Task(Of Integer)

參數

buffer
ArraySegment<Byte>

所接收數據的緩衝區。

傳回

異步工作,完成時會接收位元組數。

例外狀況

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

適用於

ReceiveAsync(IList<ArraySegment<Byte>>)

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

從已連線的通訊端擷取資料。

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public System.Threading.Tasks.Task<int> ReceiveAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.ReceiveAsync : System.Collections.Generic.IList<ArraySegment<byte>> -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffers As IList(Of ArraySegment(Of Byte))) As Task(Of Integer)

參數

buffers
IList<ArraySegment<Byte>>

已接收數據的緩衝區清單。

傳回

異步工作,完成時會接收位元組數。

例外狀況

參數 buffers 為 null。

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

備註

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用例外狀況,例如 ArgumentException仍會同步擲回。 如需預存例外狀況,請參閱 擲回的 Receive(IList<ArraySegment<Byte>>)例外狀況。

適用於

ReceiveAsync(SocketAsyncEventArgs)

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

開始非同步要求,以接收來自已連接的 Socket 物件的資料。

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

參數

e
SocketAsyncEventArgs

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

傳回

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

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

例外狀況

引數無效。 e 參數上的 BufferBufferList 屬性必須參考有效的緩衝區。 這兩個屬性可能有一個已經設定,但不會同時都已設定。

通訊端作業已使用 e 參數內指定的 SocketAsyncEventArgs 物件正在進行中。

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

備註

方法 ReceiveAsync 用於連接的套接字或系結的無連接套接字,並且用來讀取傳入數據。 必須知道套接字的本機位址。

對於系結的無連線套接字,此函式會限制接受接收訊息的位址。 函式只會從連接中指定的遠端位址傳回訊息。 其他地址的訊息會以無訊息方式捨棄。

參數 SocketAsyncEventArgs.SocketFlags 上的 e 屬性會提供 Window Sockets 服務提供者,並提供讀取要求的其他資訊。 如需如何使用此參數的詳細資訊,請參閱 System.Net.Sockets.SocketFlags

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

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

對於位元組數據流樣式套接字,傳入的數據會放在緩衝區中,直到填滿緩衝區、關閉連接,或內部緩衝的數據耗盡為止。

針對訊息導向套接字,傳入的訊息會放入緩衝區中,最多到與 e 參數相關聯的緩衝區大小總計。 如果訊息大於緩衝區,則緩衝區會填入訊息的第一個部分。

對於連線導向套接字, ReceiveAsync 方法可以使用兩種方式之一來指出虛擬線路的正常終止,而視套接字是位元組數據流還是訊息導向而定。 對於位元組數據流,已讀取的位元組零表示正常關閉,而且不會再讀取任何位元組。 對於訊息導向套接字,其中通常允許零個字節訊息, SocketException 其中 SocketAsyncEventArgs.SocketError 會將 設定為原生 Winsock WSAEDISCON 錯誤碼的 (10101) 用來表示正常關閉。 在任何情況下, SocketException 設定為 SocketAsyncEventArgs.SocketError 原生 Winsock WSAECONNRESET 錯誤碼的 (10054) 表示發生中止關閉。

另請參閱

適用於

ReceiveAsync(ArraySegment<Byte>, SocketFlags)

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

從已連線的通訊端擷取資料。

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

參數

buffer
ArraySegment<Byte>

所接收數據的緩衝區。

socketFlags
SocketFlags

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

傳回

異步工作,完成時會接收位元組數。

例外狀況

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

適用於

ReceiveAsync(IList<ArraySegment<Byte>>, SocketFlags)

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

從已連線的通訊端擷取資料。

public:
 System::Threading::Tasks::Task<int> ^ ReceiveAsync(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public System.Threading.Tasks.Task<int> ReceiveAsync (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.ReceiveAsync : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> System.Threading.Tasks.Task<int>
Public Function ReceiveAsync (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Task(Of Integer)

參數

buffers
IList<ArraySegment<Byte>>

已接收數據的緩衝區清單。

socketFlags
SocketFlags

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

傳回

異步工作,完成時會接收位元組數。

例外狀況

參數 buffers 為 null。

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

備註

這個方法會儲存在工作中,它會傳回方法同步對應專案可以擲回的所有非使用例外狀況。 如果例外狀況儲存在傳回的工作中,則會在等候工作時擲回該例外狀況。 使用例外狀況,例如 ArgumentException仍會同步擲回。 如需預存例外狀況,請參閱 擲回的 Receive(IList<ArraySegment<Byte>>, SocketFlags)例外狀況。

適用於

ReceiveAsync(Memory<Byte>, CancellationToken)

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

從已連線的通訊端擷取資料。

public System.Threading.Tasks.ValueTask<int> ReceiveAsync (Memory<byte> buffer, System.Threading.CancellationToken cancellationToken = default);
member this.ReceiveAsync : Memory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function ReceiveAsync (buffer As Memory(Of Byte), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

參數

buffer
Memory<Byte>

所接收數據的緩衝區。

cancellationToken
CancellationToken

可用來取消異步操作的取消標記。

傳回

異步工作,完成時會接收位元組數。

例外狀況

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

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

適用於

ReceiveAsync(Memory<Byte>, SocketFlags, CancellationToken)

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

從已連線的通訊端擷取資料。

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

參數

buffer
Memory<Byte>

所接收數據的緩衝區。

socketFlags
SocketFlags

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

cancellationToken
CancellationToken

可用來取消異步操作的取消標記。

傳回

異步工作,完成時會接收位元組數。

例外狀況

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

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

適用於