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)

Source:
Socket.cs
Source:
Socket.cs
Source:
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

参数

e
SocketAsyncEventArgs

要用于此异步套接字操作的 SocketAsyncEventArgs 对象。

返回

如果 I/O 操作挂起,则为 true。 操作完成时,将引发 e 参数的 Completed 事件。

如果 I/O 操作同步完成,则为 false。 在这种情况下,将不会引发 e 参数的 Completed 事件,并且可能在方法调用返回后立即检查作为参数传递的 e 对象以检索操作的结果。

例外

已经在使用 e 参数中指定的 SocketAsyncEventArgs 对象执行套接字操作。

指定的协议是面向连接的,但 Socket 尚未连接。

注解

方法 SendToAsync 启动对 参数的 属性中指定的 SocketAsyncEventArgs.RemoteEndPoint 远程主机的 e 异步发送操作。 SendToAsync通过调用 方法,可以在单独的执行线程中发送数据。 尽管此方法适用于无连接协议,但 SendToAsync 适用于无连接协议和面向连接的协议。

若要收到完成通知,必须创建实现 EventHandler<SocketAsyncEventArgs> 委托的回调方法,并将回调附加到 SocketAsyncEventArgs.Completed 事件。

若要成功调用此方法, System.Net.Sockets.SocketAsyncEventArgs 对象上需要以下属性和事件:

调用方可以在调用SendToAsync方法之前将 SocketAsyncEventArgs.UserToken 属性设置为所需的任何用户状态对象,以便可在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来保存其他所需的状态信息作为成员。

如果使用面向连接的协议,必须先调用 Accept、、AcceptAsyncBeginAcceptBeginConnectConnectConnectAsync 方法。 否则 SendToAsync 将引发 SocketException。 使用面向连接的协议时, SendToAsync 方法将忽略 属性,SocketAsyncEventArgs.RemoteEndPoint并将数据发送到System.Net.EndPoint在 、、AcceptAsyncBeginAcceptBeginConnectConnectConnectAsync 方法中建立的 Accept

如果使用无连接协议,则无需在调用 SendToAsync之前使用 BeginConnectConnectConnectAsync 方法建立默认远程主机。 仅当打算调用 BeginSendSendAsync 方法时,才需要执行此操作。 如果在调用 之前SendToAsync调用 BeginConnectConnectConnectAsync 方法, SocketAsyncEventArgs.RemoteEndPoint 属性将仅重写该发送操作的指定默认远程主机。 也不需要调用 Bind 方法。 在这种情况下,基础服务提供商将分配最合适的本地网络 IP 地址和端口号。 如果希望基础服务提供商选择可用端口,请使用端口号为零。 如果需要标识分配的本地网络 IP 地址和端口号,可以在发出事件信号并调用关联的委托后SocketAsyncEventArgs.Completed使用 LocalEndPoint 属性。

如果要将数据发送到广播地址,必须首先调用 SetSocketOption 方法并将 的 SocketOptionName.Broadcast 套接字选项设置为 true。 还必须确保缓冲区的大小不超过基础服务提供程序的最大数据包大小。 如果已发送,则不会发送数据报,并将 SendToAsync 引发 SocketException

如果在 属性中 SocketAsyncEventArgs.SocketFlags 指定 DontRoute 标志,则不会路由要发送的数据。

对于面向消息的套接字,必须注意不要超过基础传输的最大消息大小。 如果缓冲区的大小超过基础服务提供程序的最大数据包大小,则不会发送数据报,并且 SendToAsync 将引发 SocketException。 方法的 SendToAsync 成功完成并不表示数据已成功传递。

另请参阅

适用于

SendToAsync(ArraySegment<Byte>, EndPoint)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

将数据发送到指定的远程主机。

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

要向其发送数据的远程主机。

返回

以发送的字节数完成的异步任务。

例外

remoteEPnull

尝试访问套接字时出错。

适用于

SendToAsync(ArraySegment<Byte>, SocketFlags, EndPoint)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

将数据发送到指定的远程主机。

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

要向其发送数据的远程主机。

返回

以发送的字节数完成的异步任务。

例外

remoteEPnull

尝试访问套接字时出错。

适用于

SendToAsync(ReadOnlyMemory<Byte>, EndPoint, CancellationToken)

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

将数据发送到指定的远程主机。

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

可用于取消异步操作的取消标记。

返回

以发送的字节数完成的异步任务。

例外

remoteEPnull

尝试访问套接字时出错。

取消令牌已取消。 此异常存储在返回的任务中。

适用于

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

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

将数据发送到指定的远程主机。

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

可用于取消异步操作的取消标记。

返回

以发送的字节数完成的异步任务。

例外

remoteEPnull

尝试访问套接字时出错。

取消令牌已取消。 此异常存储在返回的任务中。

适用于

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

Source:
Socket.Tasks.cs
Source:
Socket.Tasks.cs

使用指定的 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

可用于取消异步操作的取消标记。

返回

以发送的字节数完成的异步任务。

例外

socketAddressnull

尝试访问套接字时出错。

取消令牌已取消。 此异常存储在返回的任务中。

适用于