Socket.BeginSendTo 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
以异步方式将数据发送到特定远程主机。
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
参数
- offset
- Int32
buffer
中的从其开始发送数据的、从零开始编排的位置。
- size
- Int32
要发送的字节数。
- socketFlags
- SocketFlags
SocketFlags 值的按位组合。
- callback
- AsyncCallback
AsyncCallback 委托。
- state
- Object
包含此请求的状态信息的对象。
返回
引用异步发送的 IAsyncResult。
例外
仅限 .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将引发 SocketException。 AcceptBeginAcceptBeginConnectConnect
BeginSendTo将忽略 remoteEP
参数,并将数据发送到EndPoint在 、BeginConnect、 Accept或 BeginAccept 方法中建立的 Connect。
如果使用无连接协议,则无需在调用 SendTo之前使用 Connect 或 BeginConnect 方法建立默认远程主机。 仅当打算调用 方法时, BeginSend 才需要执行此操作。 如果在调用 Connect 之前SendTo调用 或 BeginConnect 方法, remoteEP
参数将仅覆盖该发送操作的指定默认远程主机。 也不需要调用 Bind 方法。 在这种情况下,基础服务提供商将分配最合适的本地网络地址和端口号。 如果希望基础服务提供商选择可用端口,请使用端口号为零。 如果需要标识分配的本地网络地址和端口号,可以在 方法成功完成后EndSendTo使用 LocalEndPoint 属性。
如果要将数据发送到广播地址,必须先调用 SetSocketOption 方法并将套接字选项设置为 SocketOptionName.Broadcast。 -还必须确保缓冲区的大小不超过基础服务提供程序的最大数据包大小。 如果已发送,则不会发送数据报,并将 EndSendTo 引发 SocketException。
如果将 标志指定 DontRoute 为 socketflags
参数,则不会路由要发送的数据。
注意
如果收到 , SocketException请使用 SocketException.ErrorCode 属性获取特定的错误代码。 获取此代码后,请参阅 Windows 套接字版本 2 API 错误代码 文档,获取错误的详细说明。
备注
当你在应用程序中启用网络跟踪后,此成员将输出跟踪信息。 有关详细信息,请参阅 .NET Framework 中的网络跟踪。
注意
为异步 Socket 方法缓存执行上下文 (安全上下文、模拟用户和调用上下文) 。 首次使用特定上下文 (特定异步 Socket 方法、特定 Socket 实例和特定回调) 后,该上下文的后续使用将提高性能。