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

Параметры

e
SocketAsyncEventArgs

Объект 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 пользовательского режима запускают, когда поток находится в состоянии ожидания с оповещением

Применяется к

См. также раздел