Поделиться через


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 , используемый для этой асинхронной операции сокета.

Возвращаемое значение

Значение , если операция ввода-вывода ожидается. Событие 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 предоставляет поставщику служб сокетов окон с дополнительными сведениями о передаче файлов. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.

Для успешного System.Net.Sockets.SocketAsyncEventArgs вызова этого метода требуются следующие свойства и события объекта:

Вызывающий SocketAsyncEventArgs.UserToken объект может задать свойство любому объекту пользовательского SendPacketsAsync состояния, требуемому перед вызовом метода, чтобы информация была извлечена в методе обратного вызова. Если обратный вызов требует больше информации, чем один объект, можно создать небольшой класс для хранения других необходимых сведений о состоянии в качестве членов.

Этот метод использует функцию TransmitPackets, найденную в API сокетов Windows 2. Дополнительные сведения о функции TransmitPackets и его флагах см. в документации по сокетам Windows .

Хотя он предназначен для протоколов, ориентированных на подключение, метод также работает для протоколов без подключения, SendPacketsAsync при условии, что сначала вызывается BeginConnectConnectметод или ConnectAsync метод для установки удаленного узла по умолчанию. При использовании протоколов без подключения необходимо также убедиться, что размер файла не превышает максимальный размер пакета базового поставщика услуг. Если это делается, диаграмма данных не отправляется и SendPacketsAsync вызывает SocketException исключение.

Метод SendPacketsAsync оптимизирован в соответствии с операционной системой, в которой он используется. В выпусках SendPacketsAsync Windows Server метод оптимизирован для обеспечения высокой производительности.

В клиентских выпусках SendPacketsAsync Windows метод оптимизирован для минимального использования памяти и ресурсов.

TransmitFileOptions.UseKernelApc Использование флага в свойстве SocketAsyncEventArgs.SendPacketsFlagse параметра может обеспечить значительные преимущества производительности. Если поток, инициирующий SendPacketsAsync вызов метода, используется для тяжелых вычислений, возможно, хотя и маловероятно, что эти API могут быть запрещены при запуске. Обратите внимание, что существует разница между API ядра и пользовательским режимом. API ядра запускают, когда поток находится в состоянии ожидания. Api-интерфейсы пользовательского режима запускают, когда поток находится в состоянии ожидания, оповещаемого

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

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