Socket.BeginSendTo 方法

定義

以非同步方式將資料傳送至特定的遠端主機。

public:
 IAsyncResult ^ BeginSendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

參數

buffer
Byte[]

Byte 型別的陣列,包含要傳送的資料。

offset
Int32

buffer 中以零起始的位置,資料要在此處開始傳送。

size
Int32

要傳送的位元組數。

socketFlags
SocketFlags

SocketFlags 值的位元組合。

remoteEP
EndPoint

代表遠端裝置的 EndPoint

callback
AsyncCallback

AsyncCallback 委派。

state
Object

物件,包含這個要求的狀態資訊。

傳回

參考非同步傳送的 IAsyncResult

例外狀況

buffernull

-或-

remoteEPnull

僅限 .NET Framework 和 .NET 5 和更早版本:嘗試存取套接字時發生錯誤。

offset 小於 0。

-或-

offset 大於 buffer 的長度。

-或-

size 小於 0。

-或-

size 大於 buffer 的長度減去 offset 參數的值。

在呼叫堆疊中位置較高的呼叫端對於要求的作業沒有權限。

備註

重要

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

您可以傳遞實作 AsyncCallback 的回呼給 BeginSendTo ,以取得作業完成的通知。 請注意,如果基礎網路堆疊以同步方式完成作業,回呼將會在呼叫 BeginSendTo期間內嵌執行。 在此情況下, CompletedSynchronously 傳回 IAsyncResult 之 上的屬性會設定為 true ,表示方法會以同步方式完成。 AsyncState使用 的 IAsyncResult 屬性,取得傳遞至 BeginSendTo 方法的狀態物件。

BeginSendTo作業必須藉由呼叫 EndSendTo 方法來完成。 一般而言,方法是由提供的 AsyncCallback 委派叫用。 EndSendTo 將會封鎖呼叫線程,直到作業完成為止。

如果您使用連線導向通訊協定,您必須先呼叫、、 或 BeginAccept 方法,否則BeginSendTo會擲回 SocketExceptionAcceptBeginConnectConnect BeginSendTo會忽略 參數,remoteEP並將資料傳送至 EndPointBeginConnectAcceptBeginAccept 方法中建立的 Connect

如果您使用無連線通訊協定,則不需要在呼叫 SendTo之前,使用 ConnectBeginConnect 方法來建立預設遠端主機。 如果您想要呼叫 BeginSend 方法,則只需要執行此動作。 如果您在呼叫 SendTo之前呼叫 ConnectBeginConnect 方法,參數remoteEP只會覆寫該傳送作業的指定預設遠端主機。 您也不需要呼叫 Bind 方法。 在此情況下,基礎服務提供者會指派最適當的局域網路位址和埠號碼。 如果您想要基礎服務提供者選取免費埠,請使用零的埠號碼。 如果您需要識別指派的局域網路位址和埠號碼,您可以在方法成功完成之後EndSendTo使用 LocalEndPoint 屬性。

如果您要將資料傳送至廣播位址,您必須先呼叫 方法, SetSocketOption 並將套接字選項設定為 SocketOptionName.Broadcast。 -您也必須確定緩衝區的大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,將不會傳送數據報,而且 EndSendTo 會擲回 SocketException

如果您將 DontRoute 旗標指定為 socketflags 參數,將不會路由傳送您傳送的數據。

注意

如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。

注意

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

注意

系統會針對異步 Socket 方法快取執行內容 (安全性內容、仿真的使用者和呼叫內容) 。 在第一次使用特定內容 (特定異步 Socket 方法、特定 Socket 實例和特定回呼) 之後,後續使用該內容將會看到效能改善。

適用於

另請參閱