Socket.SendPacketsAsync(SocketAsyncEventArgs) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет асинхронную передачу набора файла или буферов данных в памяти на подключенный объект 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 для использования в данной асинхронной операции сокета.
Возвращаемое значение
true
, если операция ввода-вывода находится в состоянии ожидания. По завершении операции создается событие Completed в параметре e
.
false
, если операция ввода-вывода завершена синхронно. В данном случае событие Completed на параметре e
не будет создано и объект e
, передаваемый как параметр, можно изучить сразу после получения результатов вызова метода для извлечения результатов операции.
Исключения
Файл, указанный в свойстве FilePath, не найден.
Операция сокета уже выполнялась с использованием объекта SocketAsyncEventArgs, указанного в параметре e
.
Объект Socket не подключен к удаленному узлу.
Socket был закрыт.
Используется объект Socket, функционирующий без установления соединения, и размер отправляемого файла превышает максимальный размер пакета основного транспортного средства.
Комментарии
Метод SendPacketsAsync используется для отправки коллекции файлов или буферов данных в памяти на удаленный узел. Объект Socket уже должен быть подключен к удаленному узлу.
Если файл System.Net.Sockets.SendPacketsElement ссылается на файл в рабочем каталоге, его можно идентифицировать только по имени файла; в противном случае необходимо указать полный путь и имя файла. Поддерживаются подстановочные знаки и имена общих ресурсов UNC. Если файл не найден, FileNotFoundException возникает исключение .
Чтобы получать уведомления о завершении, необходимо создать метод обратного вызова, который реализует делегат EventHandler<SocketAsyncEventArgs> и присоединить обратный вызов к событию SocketAsyncEventArgs.Completed .
Свойство SocketAsyncEventArgs.SendPacketsFlags параметра e
предоставляет поставщику службы Window Sockets дополнительные сведения о передаче файлов. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.
Для успешного System.Net.Sockets.SocketAsyncEventArgs вызова этого метода требуются следующие свойства и события объекта :
Вызывающий объект может задать SocketAsyncEventArgs.UserToken для свойства любой объект пользовательского состояния, требуемый перед вызовом SendPacketsAsync метода , чтобы данные можно было получить в методе обратного вызова. Если для обратного вызова требуется больше сведений, чем для одного объекта, можно создать небольшой класс для хранения других необходимых сведений о состоянии в качестве членов.
Этот метод использует функцию TransmitPackets, найденную в API Windows Sockets 2. Дополнительные сведения о функции TransmitPackets и ее флагах см. в документации по сокетам Windows .
Хотя метод предназначен для протоколов, ориентированных на подключение, SendPacketsAsync он также работает для протоколов без подключения при условии, что вы сначала вызываете BeginConnectметод , Connectили ConnectAsync для установки удаленного узла по умолчанию. При использовании протоколов без подключения необходимо также убедиться, что размер файла не превышает максимальный размер пакета базового поставщика услуг. В этом случае датаграмма не отправляется и SendPacketsAsync вызывает SocketException исключение.
Метод SendPacketsAsync оптимизирован в соответствии с операционной системой, в которой он используется. В выпусках SendPacketsAsync Windows Server метод оптимизирован для высокой производительности.
В клиентских выпусках Windows метод оптимизирован для минимального SendPacketsAsync использования памяти и ресурсов.
Использование флага TransmitFileOptions.UseKernelApc в свойстве SocketAsyncEventArgs.SendPacketsFlagse
параметра может значительно повысить производительность. Если поток, инициирующий SendPacketsAsync вызов метода, используется для интенсивных вычислений, возможно, хотя и маловероятно, запуск БТР можно предотвратить. Обратите внимание, что существует разница между api-интерфейсами ядра и пользовательским режимом. APC ядра запускаются, когда поток находится в состоянии ожидания. APC пользовательского режима запускают, когда поток находится в состоянии ожидания с оповещением