Socket.BeginSendTo 方法

定义

以异步方式将数据发送到特定远程主机。

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

参数

buffer
Byte[]

Byte 类型的数组,它包含要发送的数据。

offset
Int32

buffer 中的从其开始发送数据的、从零开始编排的位置。

size
Int32

要发送的字节数。

socketFlags
SocketFlags

SocketFlags 值的按位组合。

remoteEP
EndPoint

表示远程设备的 EndPoint

callback
AsyncCallback

AsyncCallback 委托。

state
Object

包含此请求的状态信息的对象。

返回

引用异步发送的 IAsyncResult

例外

buffernull

remoteEPnull

仅.NET Framework和 .NET 5 及更早版本:尝试访问套接字时出错。

offset 小于 0。

offset 大于 buffer 的长度。

size 小于 0。

- 或 -

size 大于 buffer 的长度减去 offset 参数的值。

调用堆栈中的较高调用方无权执行所请求的操作。

注解

重要

这是一个兼容性 API。 不建议使用 APM (Begin*End*) 方法进行新开发。 请改用 Task基于 的等效项。

可以将实现的AsyncCallbackBeginSendTo回调传递给 ,以获取有关操作完成的通知。 请注意,如果基础网络堆栈同步完成操作,将在调用 BeginSendTo期间内联执行回调。 在这种情况下, CompletedSynchronously 返回 IAsyncResult 的 上的 属性将设置为 true 以指示该方法同步完成。 AsyncState使用 的 IAsyncResult 属性获取传递给 BeginSendTo 方法的状态对象。

BeginSendTo必须通过调用 EndSendTo 方法完成操作。 通常,方法由提供的 AsyncCallback 委托调用。 EndSendTo 将阻止调用线程,直到操作完成。

如果使用面向连接的协议,则必须首先调用 、 、 或 方法,或者BeginSendTo将引发 SocketExceptionAcceptBeginAcceptBeginConnectConnect BeginSendTo将忽略 参数,remoteEP并将数据发送到 EndPointBeginConnectAcceptBeginAccept 方法中建立的 Connect

如果使用无连接协议,则无需在调用 SendTo之前使用 ConnectBeginConnect 方法建立默认远程主机。 仅当你打算调用 BeginSend 方法时,才需要执行此操作。 如果在调用 之前SendTo调用 ConnectBeginConnect 方法,则remoteEP参数将仅覆盖该发送操作的指定默认远程主机。 也不需要调用 Bind 方法。 在这种情况下,基础服务提供商将分配最合适的本地网络地址和端口号。 如果希望基础服务提供商选择可用端口,请使用零端口号。 如果需要标识分配的本地网络地址和端口号,可以在 方法成功完成后EndSendTo使用 LocalEndPoint 属性。

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

如果将 标志指定 DontRoutesocketflags 参数,则不会路由要发送的数据。

注意

如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,了解错误的详细说明。

备注

当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪

注意

为异步 Socket 方法缓存 (安全上下文、模拟用户和调用上下文) 的执行上下文。 第一次使用特定上下文 (特定异步 Socket 方法、特定 Socket 实例和特定回调) 后,该上下文的后续使用将提高性能。

适用于

另请参阅