Socket.EndSend 方法

定義

結束暫止的非同步傳送。

多載

EndSend(IAsyncResult)

結束暫止的非同步傳送。

EndSend(IAsyncResult, SocketError)

結束暫止的非同步傳送。

EndSend(IAsyncResult)

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

結束暫止的非同步傳送。

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

參數

asyncResult
IAsyncResult

IAsyncResult,存放這個非同步作業的狀態資訊。

傳回

如果成功,則將位元組數目傳送至 Socket,否則,則產生一個無效的 Socket 錯誤。

例外狀況

asyncResultnull

asyncResult 不會經由對 BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) 方法的呼叫傳回。

先前已針對非同步傳送呼叫 EndSend(IAsyncResult)

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

-或-

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

僅限 .NET Framework、.NET Core 和 .NET 5-6: Socket 已關閉 。

備註

重要

這是相容性 API。 不建議使用 APM (Begin*End*) 方法來進行新的開發。 請改用型對 Task 等專案。

EndSend 完成 由 BeginSend 啟動的作業。 您必須傳遞 IAsyncResultBeginSend 對呼叫所建立的 。

如果您使用無連線通訊協定, EndSend 將會封鎖直到傳送資料包為止。 如果您使用連接導向通訊協定,將會封鎖直到 EndSend 傳送部分緩衝區為止。 如果 的 EndSend 傳回值表示緩衝區未完全傳送,請再次呼叫 BeginSend 方法,修改緩衝區以保存未傳送的資料。

不保證您傳送的資料會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出資料為止。 方法成功完成 BeginSend 表示基礎系統有空間可緩衝處理網路傳送的資料。

注意

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

注意

當該執行緒結束時,由指定執行緒起始的所有 I/O 都會取消。 如果執行緒在作業完成之前結束,暫止的非同步作業可能會失敗。

注意

順利完成傳送並不會指出已成功傳遞資料。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的資料,除非通訊端已置於非封鎖模式,否則傳送將會封鎖。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱.NET Framework 中的網路追蹤

另請參閱

適用於

EndSend(IAsyncResult, SocketError)

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

結束暫止的非同步傳送。

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

參數

asyncResult
IAsyncResult

IAsyncResult,存放這個非同步作業的狀態資訊。

errorCode
SocketError

SocketError 物件,儲存通訊端錯誤。

傳回

如果成功,則將位元組數目傳送至 Socket,否則,則產生一個無效的 Socket 錯誤。

例外狀況

asyncResultnull

asyncResult 不會經由對 BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) 方法的呼叫傳回。

先前已針對非同步傳送呼叫 EndSend(IAsyncResult)

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

-或-

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

僅限 .NET Framework、.NET Core 和 .NET 5-6: Socket 已關閉 。

備註

重要

這是相容性 API。 不建議使用 APM (Begin*End*) 方法來進行新的開發。 請改用型對 Task 等專案。

EndSend 完成 由 BeginSend 啟動的作業。 您必須傳遞 IAsyncResultBeginSend 對呼叫所建立的 。

如果您使用無連線通訊協定, EndSend 將會封鎖直到傳送資料包為止。 如果您使用連接導向通訊協定,將會封鎖直到 EndSend 傳送部分緩衝區為止。 如果 的 EndSend 傳回值表示緩衝區未完全傳送,請再次呼叫 BeginSend 方法,修改緩衝區以保存未傳送的資料。

不保證您傳送的資料會立即出現在網路上。 為了提升網路效率,基礎系統可能會延遲傳輸,直到收集大量的傳出資料為止。 方法成功完成 BeginSend 表示基礎系統有空間可緩衝處理網路傳送的資料。

注意

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

注意

當該執行緒結束時,由指定執行緒起始的所有 I/O 都會取消。 如果執行緒在作業完成之前結束,暫止的非同步作業可能會失敗。

注意

順利完成傳送並不會指出已成功傳遞資料。 如果傳輸系統內沒有可用的緩衝區空間來保存要傳輸的資料,除非通訊端已置於非封鎖模式,否則傳送將會封鎖。

注意

在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱.NET Framework 中的網路追蹤

另請參閱

適用於