Socket.BeginSendTo 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
以非同步方式將資料傳送至特定的遠端主機。
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
參數
- offset
- Int32
buffer
中以零起始的位置,資料要在此處開始傳送。
- size
- Int32
要傳送的位元組數。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合。
- callback
- AsyncCallback
AsyncCallback 委派。
- state
- Object
物件,包含這個要求的狀態資訊。
傳回
參考非同步傳送的 IAsyncResult。
例外狀況
僅限 .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會擲回 SocketException。 AcceptBeginConnectConnect
BeginSendTo會忽略 參數,remoteEP
並將資料傳送至 EndPoint 、BeginConnect、 Accept或 BeginAccept 方法中建立的 Connect。
如果您使用無連線通訊協定,則不需要在呼叫 SendTo之前,使用 Connect 或 BeginConnect 方法來建立預設遠端主機。 如果您想要呼叫 BeginSend 方法,則只需要執行此動作。 如果您在呼叫 SendTo之前呼叫 Connect 或 BeginConnect 方法,參數remoteEP
只會覆寫該傳送作業的指定預設遠端主機。 您也不需要呼叫 Bind 方法。 在此情況下,基礎服務提供者會指派最適當的局域網路位址和埠號碼。 如果您想要基礎服務提供者選取免費埠,請使用零的埠號碼。 如果您需要識別指派的局域網路位址和埠號碼,您可以在方法成功完成之後EndSendTo使用 LocalEndPoint 屬性。
如果您要將資料傳送至廣播位址,您必須先呼叫 方法, SetSocketOption 並將套接字選項設定為 SocketOptionName.Broadcast。 -您也必須確定緩衝區的大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,將不會傳送數據報,而且 EndSendTo 會擲回 SocketException。
如果您將 DontRoute 旗標指定為 socketflags
參數,將不會路由傳送您傳送的數據。
注意
如果您收到 SocketException,請使用 SocketException.ErrorCode 屬性來取得特定的錯誤碼。 取得此程式代碼之後,請參閱 Windows Sockets 第 2 版 API 錯誤碼 檔,以取得錯誤的詳細描述。
注意
在應用程式中啟用網路追蹤時,這個成員會輸出追蹤資訊。 如需詳細資訊,請參閱 .NET Framework 中的網路追蹤。
注意
系統會針對異步 Socket 方法快取執行內容 (安全性內容、仿真的使用者和呼叫內容) 。 在第一次使用特定內容 (特定異步 Socket 方法、特定 Socket 實例和特定回呼) 之後,後續使用該內容將會看到效能改善。