Socket.SendToAsync 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
SendToAsync(SocketAsyncEventArgs) |
以非同步方式將資料傳送至特定的遠端主機。 |
SendToAsync(ArraySegment<Byte>, EndPoint) |
將資料傳送至指定的遠端主機。 |
SendToAsync(ArraySegment<Byte>, SocketFlags, EndPoint) |
將資料傳送至指定的遠端主機。 |
SendToAsync(ReadOnlyMemory<Byte>, EndPoint, CancellationToken) |
將資料傳送至指定的遠端主機。 |
SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, EndPoint, CancellationToken) |
將資料傳送至指定的遠端主機。 |
SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, SocketAddress, CancellationToken) |
使用指定的 SocketFlags,傳送資料至特定端點。 |
SendToAsync(SocketAsyncEventArgs)
- 來源:
- Socket.cs
- 來源:
- Socket.cs
- 來源:
- Socket.cs
以非同步方式將資料傳送至特定的遠端主機。
public:
bool SendToAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendToAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendToAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendToAsync (e As SocketAsyncEventArgs) As Boolean
參數
SocketAsyncEventArgs 物件,用於這個非同步通訊端作業。
傳回
若 I/O 作業暫止,則為 true
。 作業完成時會引發與 e
參數有關的 Completed 事件。
若 I/O 作業同步完成,則為 false
。 在這個情況下,就不會引發與 e
參數有關的 Completed 事件,而在方法呼叫傳回後會立即檢查做為參數傳遞的 e
物件,以擷取作業的結果。
例外狀況
RemoteEndPoint 不可以是 null。
通訊端作業已使用 e
參數內指定的 SocketAsyncEventArgs 物件正在進行中。
指定的通訊協定是連接導向的,但尚未連接 Socket。
備註
方法 SendToAsync 會啟動非同步傳送作業至 參數 的 屬性 e
中指定的 SocketAsyncEventArgs.RemoteEndPoint 遠端主機。 SendToAsync呼叫 方法可讓您在個別的執行執行緒內傳送資料。 雖然這個方法適用于無連線通訊協定, SendToAsync 但適用于無連線和連線導向的通訊協定。
若要收到完成通知,您必須建立回呼方法,以實作 EventHandler < SocketAsyncEventArgs > 委派,並將回呼附加至 SocketAsyncEventArgs.Completed 事件。
需要物件上的 System.Net.Sockets.SocketAsyncEventArgs 下列屬性和事件,才能成功呼叫這個方法:
呼叫端可以在呼叫 SendToAsync 方法之前,將 屬性設定 SocketAsyncEventArgs.UserToken 為任何所需的使用者狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保存為成員。
如果您使用連接導向通訊協定,您必須先呼叫 Accept 、 AcceptAsync 、 BeginAccept 、 BeginConnect 、 Connect 或 ConnectAsync 方法。 否則 SendToAsync 會擲回 SocketException 。 使用連接導向通訊協定時, SendToAsync 方法會忽略 屬性, SocketAsyncEventArgs.RemoteEndPoint 並將資料傳送至 System.Net.EndPoint 、 AcceptAsync 、 BeginAccept 、 BeginConnect 、 Connect 或 ConnectAsync 方法中建立的 Accept 。
如果您使用無連線通訊協定,則不需要在呼叫 SendToAsync 之前,使用 BeginConnect 、 Connect 或 ConnectAsync 方法來建立預設遠端主機。 如果您想要呼叫 或 SendAsync 方法, BeginSend 您只需要執行此動作。 如果您在呼叫 SendToAsync 之前呼叫 BeginConnect 、 Connect 或 ConnectAsync 方法, SocketAsyncEventArgs.RemoteEndPoint 則 屬性只會覆寫該傳送作業的指定預設遠端主機。 您也不需要呼叫 Bind 方法。 在此情況下,基礎服務提供者會指派最適合的區域網路 IP 位址和埠號碼。 如果您想要基礎服務提供者選取免費埠,請使用零的埠號碼。 如果您需要識別指派的區域網路 IP 位址和埠號碼,您可以在事件發出訊號並呼叫相關聯的委派之後 SocketAsyncEventArgs.Completed ,使用 LocalEndPoint 屬性。
如果您想要將資料傳送至廣播位址,您必須先呼叫 方法, SetSocketOption 並將通訊端選項設定為 SocketOptionName.Broadcast true。 您也必須確定緩衝區的大小不會超過基礎服務提供者的封包大小上限。 如果這樣做,將不會傳送資料包,而且 SendToAsync 會擲回 SocketException 。
如果您在 屬性中 SocketAsyncEventArgs.SocketFlags 指定 DontRoute 旗標,將不會路由傳送您傳送的資料。
對於訊息導向通訊端,請務必不要超過基礎傳輸的訊息大小上限。 如果緩衝區的大小超過基礎服務提供者的封包大小上限,則不會傳送資料包,而且 SendToAsync 會擲回 SocketException 。 方法成功完成 SendToAsync 並不表示已成功傳遞資料。
另請參閱
適用於
SendToAsync(ArraySegment<Byte>, EndPoint)
將資料傳送至指定的遠端主機。
public:
System::Threading::Tasks::Task<int> ^ SendToAsync(ArraySegment<System::Byte> buffer, System::Net::EndPoint ^ remoteEP);
public System.Threading.Tasks.Task<int> SendToAsync (ArraySegment<byte> buffer, System.Net.EndPoint remoteEP);
member this.SendToAsync : ArraySegment<byte> * System.Net.EndPoint -> System.Threading.Tasks.Task<int>
Public Function SendToAsync (buffer As ArraySegment(Of Byte), remoteEP As EndPoint) As Task(Of Integer)
參數
- buffer
- ArraySegment<Byte>
要傳送之資料的緩衝區。
- remoteEP
- EndPoint
要傳送資料的遠端主機。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
remoteEP
為 null
。
嘗試存取通訊端時發生錯誤。
適用於
SendToAsync(ArraySegment<Byte>, SocketFlags, EndPoint)
將資料傳送至指定的遠端主機。
public:
System::Threading::Tasks::Task<int> ^ SendToAsync(ArraySegment<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP);
public System.Threading.Tasks.Task<int> SendToAsync (ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);
member this.SendToAsync : ArraySegment<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint -> System.Threading.Tasks.Task<int>
Public Function SendToAsync (buffer As ArraySegment(Of Byte), socketFlags As SocketFlags, remoteEP As EndPoint) As Task(Of Integer)
參數
- buffer
- ArraySegment<Byte>
要傳送之資料的緩衝區。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合,將在傳送資料時使用。
- remoteEP
- EndPoint
要傳送資料的遠端主機。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
remoteEP
為 null
。
嘗試存取通訊端時發生錯誤。
適用於
SendToAsync(ReadOnlyMemory<Byte>, EndPoint, CancellationToken)
將資料傳送至指定的遠端主機。
public System.Threading.Tasks.ValueTask<int> SendToAsync (ReadOnlyMemory<byte> buffer, System.Net.EndPoint remoteEP, System.Threading.CancellationToken cancellationToken = default);
member this.SendToAsync : ReadOnlyMemory<byte> * System.Net.EndPoint * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendToAsync (buffer As ReadOnlyMemory(Of Byte), remoteEP As EndPoint, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
參數
- buffer
- ReadOnlyMemory<Byte>
要傳送之資料的緩衝區。
- remoteEP
- EndPoint
要傳送資料的遠端主機。
- cancellationToken
- CancellationToken
可用來取消非同步作業的解除標記。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
remoteEP
為 null
。
嘗試存取通訊端時發生錯誤。
解除標記已取消。 此例外狀況會儲存在傳回的工作中。
適用於
SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, EndPoint, CancellationToken)
將資料傳送至指定的遠端主機。
public System.Threading.Tasks.ValueTask<int> SendToAsync (ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, System.Threading.CancellationToken cancellationToken = default);
member this.SendToAsync : ReadOnlyMemory<byte> * System.Net.Sockets.SocketFlags * System.Net.EndPoint * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendToAsync (buffer As ReadOnlyMemory(Of Byte), socketFlags As SocketFlags, remoteEP As EndPoint, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
參數
- buffer
- ReadOnlyMemory<Byte>
要傳送之資料的緩衝區。
- socketFlags
- SocketFlags
SocketFlags 值的位元組合,將在傳送資料時使用。
- remoteEP
- EndPoint
要傳送資料的遠端主機。
- cancellationToken
- CancellationToken
可用來取消非同步作業的解除標記。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
remoteEP
為 null
。
嘗試存取通訊端時發生錯誤。
解除標記已取消。 此例外狀況會儲存在傳回的工作中。
適用於
SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, SocketAddress, CancellationToken)
使用指定的 SocketFlags,傳送資料至特定端點。
public System.Threading.Tasks.ValueTask<int> SendToAsync (ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress socketAddress, System.Threading.CancellationToken cancellationToken = default);
member this.SendToAsync : ReadOnlyMemory<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Function SendToAsync (buffer As ReadOnlyMemory(Of Byte), socketFlags As SocketFlags, socketAddress As SocketAddress, Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
參數
- buffer
- ReadOnlyMemory<Byte>
要傳送之資料的緩衝區。
- socketFlags
- SocketFlags
傳送資料時將使用的值位元組合 SocketFlags 。
- socketAddress
- SocketAddress
SocketAddress,表示資料的目的端。
- cancellationToken
- CancellationToken
可用來取消非同步作業的解除標記。
傳回
以傳送的位元組數目完成的非同步工作。
例外狀況
socketAddress
為 null
。
嘗試存取通訊端時發生錯誤。
解除標記已取消。 此例外狀況會儲存在傳回的工作中。
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應