Socket.SendToAsync 方法

定義

多載

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

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

C#
public bool SendToAsync(System.Net.Sockets.SocketAsyncEventArgs e);

參數

e
SocketAsyncEventArgs

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為任何所需的用戶狀態物件,以便在回呼方法中擷取資訊。 如果回呼需要比單一物件更多的資訊,則可以建立小型類別,以將其他必要狀態資訊保留為成員。

如果您使用連接導向通訊協定,您必須先呼叫 AcceptAcceptAsyncBeginAcceptBeginConnectConnectConnectAsync 方法。 否則 SendToAsync 會擲回 SocketException。 使用連接導向通訊協定時,SendToAsync方法會忽略 屬性,SocketAsyncEventArgs.RemoteEndPoint並將資料傳送至 System.Net.EndPointAcceptAsyncBeginAcceptBeginConnectConnectConnectAsync 方法中建立的 Accept

如果您使用無連線通訊協定,則不需要在呼叫 SendToAsync之前,使用BeginConnectConnectConnectAsync 方法來建立預設遠端主機。 如果您想要呼叫 或 SendAsync 方法,BeginSend您只需要執行此動作。 如果您在呼叫 SendToAsync之前呼叫BeginConnectConnectConnectAsync 方法,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

SendToAsync(ArraySegment<Byte>, EndPoint)

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

將數據傳送至指定的遠端主機。

C#
public System.Threading.Tasks.Task<int> SendToAsync(ArraySegment<byte> buffer, System.Net.EndPoint remoteEP);

參數

buffer
ArraySegment<Byte>

要傳送之數據的緩衝區。

remoteEP
EndPoint

要傳送數據的遠端主機。

傳回

以傳送的位元組數目完成的異步工作。

例外狀況

remoteEPnull

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

適用於

.NET 10 和其他版本
產品 版本
.NET 7, 8, 9, 10

SendToAsync(ArraySegment<Byte>, SocketFlags, EndPoint)

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

將數據傳送至指定的遠端主機。

C#
public System.Threading.Tasks.Task<int> SendToAsync(ArraySegment<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP);

參數

buffer
ArraySegment<Byte>

要傳送之數據的緩衝區。

socketFlags
SocketFlags

SocketFlags 值的位元組合,會在傳送數據時使用。

remoteEP
EndPoint

要傳送數據的遠端主機。

傳回

以傳送的位元組數目完成的異步工作。

例外狀況

remoteEPnull

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

適用於

.NET 10 和其他版本
產品 版本
.NET 6, 7, 8, 9, 10

SendToAsync(ReadOnlyMemory<Byte>, EndPoint, CancellationToken)

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

將數據傳送至指定的遠端主機。

C#
public System.Threading.Tasks.ValueTask<int> SendToAsync(ReadOnlyMemory<byte> buffer, System.Net.EndPoint remoteEP, System.Threading.CancellationToken cancellationToken = default);

參數

buffer
ReadOnlyMemory<Byte>

要傳送之數據的緩衝區。

remoteEP
EndPoint

要傳送數據的遠端主機。

cancellationToken
CancellationToken

可用來取消異步操作的取消標記。

傳回

以傳送的位元組數目完成的異步工作。

例外狀況

remoteEPnull

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

取消令牌已取消。 此例外狀況會儲存在傳回的工作中。

適用於

.NET 10 和其他版本
產品 版本
.NET 7, 8, 9, 10

SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, EndPoint, CancellationToken)

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

將數據傳送至指定的遠端主機。

C#
public System.Threading.Tasks.ValueTask<int> SendToAsync(ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, System.Threading.CancellationToken cancellationToken = default);

參數

buffer
ReadOnlyMemory<Byte>

要傳送之數據的緩衝區。

socketFlags
SocketFlags

SocketFlags 值的位元組合,會在傳送數據時使用。

remoteEP
EndPoint

要傳送數據的遠端主機。

cancellationToken
CancellationToken

可用來取消異步操作的取消標記。

傳回

以傳送的位元組數目完成的異步工作。

例外狀況

remoteEPnull

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

取消令牌已取消。 此例外狀況會儲存在傳回的工作中。

適用於

.NET 10 和其他版本
產品 版本
.NET 6, 7, 8, 9, 10

SendToAsync(ReadOnlyMemory<Byte>, SocketFlags, SocketAddress, CancellationToken)

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

使用指定的 SocketFlags,傳送資料至特定端點。

C#
public System.Threading.Tasks.ValueTask<int> SendToAsync(ReadOnlyMemory<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress socketAddress, System.Threading.CancellationToken cancellationToken = default);

參數

buffer
ReadOnlyMemory<Byte>

要傳送之數據的緩衝區。

socketFlags
SocketFlags

傳送數據時將使用之值的位元組合 SocketFlags

socketAddress
SocketAddress

SocketAddress,表示資料的目的端。

cancellationToken
CancellationToken

可用來取消異步操作的取消標記。

傳回

以傳送的位元組數目完成的異步工作。

例外狀況

socketAddressnull

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

取消令牌已取消。 此例外狀況會儲存在傳回的工作中。

適用於

.NET 10 和其他版本
產品 版本
.NET 8, 9, 10