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,傳送資料至特定端點。 |
- 來源:
- 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、 BeginConnectConnect或 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 成功完成並不表示已成功傳遞數據。
另請參閱
適用於
.NET 10 和其他版本
產品 | 版本 |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10 |
.NET Framework | 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 1.3, 1.4, 1.6, 2.0, 2.1 |
UWP | 10.0 |
將數據傳送至指定的遠端主機。
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
。
嘗試存取通訊端時發生錯誤。
適用於
.NET 10 和其他版本
產品 | 版本 |
---|---|
.NET | 7, 8, 9, 10 |
將數據傳送至指定的遠端主機。
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
。
嘗試存取通訊端時發生錯誤。
適用於
.NET 10 和其他版本
產品 | 版本 |
---|---|
.NET | 6, 7, 8, 9, 10 |
將數據傳送至指定的遠端主機。
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
。
嘗試存取通訊端時發生錯誤。
取消令牌已取消。 此例外狀況會儲存在傳回的工作中。
適用於
.NET 10 和其他版本
產品 | 版本 |
---|---|
.NET | 7, 8, 9, 10 |
將數據傳送至指定的遠端主機。
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
。
嘗試存取通訊端時發生錯誤。
取消令牌已取消。 此例外狀況會儲存在傳回的工作中。
適用於
.NET 10 和其他版本
產品 | 版本 |
---|---|
.NET | 6, 7, 8, 9, 10 |
使用指定的 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
。
嘗試存取通訊端時發生錯誤。
取消令牌已取消。 此例外狀況會儲存在傳回的工作中。
適用於
.NET 10 和其他版本
產品 | 版本 |
---|---|
.NET | 8, 9, 10 |