語言

Socket.EndReceive 方法

定義

結束一個待處理的非同步讀取。

多載

名稱 Description
EndReceive(IAsyncResult)

結束一個待處理的非同步讀取。

EndReceive(IAsyncResult, SocketError)

結束一個待處理的非同步讀取。

EndReceive(IAsyncResult)

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

結束一個待處理的非同步讀取。

public:
 int EndReceive(IAsyncResult ^ asyncResult);
public int EndReceive(IAsyncResult asyncResult);
member this.EndReceive : IAsyncResult -> int
Public Function EndReceive (asyncResult As IAsyncResult) As Integer

參數

asyncResult
IAsyncResult

一個 IAsyncResult 儲存狀態資訊及使用者定義資料的非同步操作。

傳回

接收的位元組總數。 該方法僅在請求零位元組或因對等套接字執行優雅關機而無更多位元組可用時回傳零(0)。 若請求零位元組,接收操作可能立即完成,或直到至少有一個位元組可用後才完成(但不會消耗任何資料)。

例外狀況

asyncResult 是 null。

EndReceive(IAsyncResult) 先前用於非同步讀取。

嘗試存取該套接字時發生錯誤。

-或-

僅限 .NET 7+ 版本: Socket 已關閉。

僅支援 .NET Framework、.NET Core 及 .NET 5-6: Socket 已關閉。

備註

Important

這是一個相容性 API。 我們不建議使用 APM (Begin* 和 End*)方法來進行新開發。 相反地,使用 Task基於 的等價函數。

EndReceive 完成由 開始的 BeginReceive運算。 你需要傳遞 IAsyncResult 由配對 BeginReceive 呼叫創建的。

此 EndReceive 方法會封鎖直到資料可用。 如果你使用無連接協定, EndReceive 會讀取第一個已排隊的資料報,存放在進入網路緩衝區中。 如果你使用連線導向協定,該EndReceive方法會讀取你在參數中sizeBeginReceive指定的位元組數內的可用資料。 如果遠端主機關閉 Socket 該方法的 Shutdown 連線,且所有可用資料都已接收完畢, EndReceive 該方法將立即完成並回傳零位元組。

Note

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。

Note

當該執行緒退出時,所有由特定執行緒發起的 I/O 都會被取消。 待處理的非同步操作若執行緒在執行完成前退出,可能會失敗。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網路追蹤。

另請參閱

適用於

EndReceive(IAsyncResult, SocketError)

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

結束一個待處理的非同步讀取。

public:
 int EndReceive(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int EndReceive(IAsyncResult asyncResult, out System.Net.Sockets.SocketError errorCode);
member this.EndReceive : IAsyncResult * SocketError -> int
Public Function EndReceive (asyncResult As IAsyncResult, ByRef errorCode As SocketError) As Integer

參數

asyncResult
IAsyncResult

一個 IAsyncResult 儲存狀態資訊及使用者定義資料的非同步操作。

errorCode
SocketError

一個 SocketError 儲存套接字錯誤的物件。

傳回

接收的位元組總數。 該方法僅在請求零位元組或因對等套接字執行優雅關機而無更多位元組可用時回傳零(0)。 若請求零位元組,接收操作可能立即完成,或直到至少有一個位元組可用後才完成(但不會消耗任何資料)。

例外狀況

asyncResult 是 null。

EndReceive(IAsyncResult) 先前用於非同步讀取。

嘗試存取該套接字時發生錯誤。

-或-

僅限 .NET 7+ 版本: Socket 已關閉。

僅支援 .NET Framework、.NET Core 及 .NET 5-6: Socket 已關閉。

備註

Important

這是一個相容性 API。 我們不建議使用 APM (Begin* 和 End*)方法來進行新開發。 相反地,使用 Task基於 的等價函數。

EndReceive 完成由 開始的 BeginReceive運算。 你需要傳遞 IAsyncResult 由配對 BeginReceive 呼叫創建的。

此 EndReceive 方法會封鎖直到資料可用。 如果你使用無連接協定, EndReceive 會讀取第一個已排隊的資料報,存放在進入網路緩衝區中。 如果你使用連線導向協定,該EndReceive方法會讀取你在參數中sizeBeginReceive指定的位元組數內的可用資料。 如果遠端主機關閉 Socket 該方法的 Shutdown 連線,且所有可用資料都已接收完畢, EndReceive 該方法將立即完成並回傳零位元組。

Note

如果你收到 SocketException,請使用該 SocketException.ErrorCode 屬性取得特定的錯誤代碼。

Note

當該執行緒退出時,所有由特定執行緒發起的 I/O 都會被取消。 待處理的非同步操作若執行緒在執行完成前退出,可能會失敗。

Note

當您在應用程式中啟用網路追蹤時,此成員會輸出追蹤資訊。 欲了解更多資訊,請參閱.NET框架中的網路追蹤。

另請參閱

適用於