Socket.SendPacketsAsync(SocketAsyncEventArgs) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将文件集合或者内存中的数据缓冲区以异步方法发送给连接的 Socket 对象。
public:
bool SendPacketsAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendPacketsAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendPacketsAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendPacketsAsync (e As SocketAsyncEventArgs) As Boolean
参数
要用于此异步套接字操作的 SocketAsyncEventArgs 对象。
返回
如果 I/O 操作挂起,则为 true
。 操作完成时,将引发 e
参数的 Completed 事件。
如果 I/O 操作同步完成,则为 false
。 在这种情况下,将不会引发 e
参数的 Completed 事件,并且可能在方法调用返回后立即检查作为参数传递的 e
对象以检索操作的结果。
例外
未找到在 FilePath 属性中指定的文件。
已经在使用 e
参数中指定的 SocketAsyncEventArgs 对象执行套接字操作。
Socket 未连接到远程主机。
使用的是无连接 Socket,并且所发送的文件超过了基础传输的最大数据包大小。
注解
方法 SendPacketsAsync 用于将文件集合或内存中的数据缓冲区发送到远程主机。 Socket必须已连接到远程主机。
System.Net.Sockets.SendPacketsElement如果 引用工作目录中的文件,则只能使用文件的名称来标识该文件;否则,必须指定文件的完整路径和名称。 支持通配符和 UNC 共享名称。 如果未找到该文件, FileNotFoundException 则引发 。
若要收到完成通知,必须创建实现 EventHandler<SocketAsyncEventArgs> 委托的回调方法,并将回调附加到 SocketAsyncEventArgs.Completed 事件。
SocketAsyncEventArgs.SendPacketsFlags参数上的 e
属性为窗口套接字服务提供程序提供有关文件传输的其他信息。 有关如何使用此参数的详细信息,请参阅 TransmitFileOptions。
若要成功调用此方法, System.Net.Sockets.SocketAsyncEventArgs 对象上需要以下属性和事件:
调用方可以在调用SendPacketsAsync方法之前将 SocketAsyncEventArgs.UserToken 属性设置为所需的任何用户状态对象,以便可在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来保存其他所需的状态信息作为成员。
此方法使用 Windows 套接字 2 API 中的 TransmitPackets 函数。 有关 TransmitPackets 函数及其标志的详细信息,请参阅 Windows 套接字 文档。
虽然该方法适用于面向连接的协议, SendPacketsAsync 但也适用于无连接协议,前提是首先调用 BeginConnect、 Connect或 ConnectAsync 方法来建立默认远程主机。 使用无连接协议时,还必须确保文件大小不超过基础服务提供程序的最大数据包大小。 如果存在,则不会发送数据报,并 SendPacketsAsync 引发 SocketException 异常。
方法 SendPacketsAsync 根据使用它的操作系统进行优化。 在 Windows Server 版本上 SendPacketsAsync , 方法针对高性能进行了优化。
在 Windows 客户端版本上 SendPacketsAsync , 方法针对最小内存和资源利用率进行了优化。
在 参数的 TransmitFileOptions.UseKernelApc 属性e
中使用 SocketAsyncEventArgs.SendPacketsFlags 标志可提供显著的性能优势。 如果发起方法调用的 SendPacketsAsync 线程用于繁重的计算,则可能会阻止 APC 启动(尽管不太可能)。 请注意,内核和用户模式 APC 之间存在差异。 内核 APC 在线程处于等待状态时启动。 用户模式 APC 在线程处于可警报等待状态时启动