Socket.SendPacketsAsync(SocketAsyncEventArgs) Method

Definition

Выполняет асинхронную передачу набора файла или буферов данных в памяти на подключенный объект Socket.Sends a collection of files or in memory data buffers asynchronously to a connected Socket object.

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

Parameters

e
SocketAsyncEventArgs

Объект SocketAsyncEventArgs для использования в данной асинхронной операции сокета.The SocketAsyncEventArgs object to use for this asynchronous socket operation.

Returns

Boolean

true, если операция ввода-вывода находится в состоянии ожидания.true if the I/O operation is pending. По завершении операции создается событие Completed в параметре e.The Completed event on the e parameter will be raised upon completion of the operation.

false, если операция ввода-вывода завершена синхронно.false if the I/O operation completed synchronously. В данном случае событие Completed на параметре e не будет создано и объект e, передаваемый как параметр, можно изучить сразу после получения результатов вызова метода для извлечения результатов операции.In this case, The Completed event on the e parameter will not be raised and the e object passed as a parameter may be examined immediately after the method call returns to retrieve the result of the operation.

Exceptions

Файл, указанный в свойстве FilePath, не найден.The file specified in the FilePath property was not found.

Операция сокета уже выполнялась с использованием объекта SocketAsyncEventArgs, указанного в параметре e.A socket operation was already in progress using the SocketAsyncEventArgs object specified in the e parameter.

Этот метод доступен только в Windows XP и более поздних версиях.Windows XP or later is required for this method. Это исключение возникает также в том случае, когда объект Socket не подключен к удаленному узлу.This exception also occurs if the Socket is not connected to a remote host.

Socket был закрыт.The Socket has been closed.

Используется объект Socket, функционирующий без установления соединения, и размер отправляемого файла превышает максимальный размер пакета основного транспортного средства.A connectionless Socket is being used and the file being sent exceeds the maximum packet size of the underlying transport.

Remarks

Метод SendPacketsAsync используется для отправки коллекции файлов или буферов данных в памяти на удаленный узел.The SendPacketsAsync method is used to send a collection of files or in memory data buffers to remote host. Socket уже должен быть подключен к удаленному узлу.The Socket must already be connected to the remote host.

Если System.Net.Sockets.SendPacketsElement ссылается на файл в рабочем каталоге, он может быть идентифицирован только с именем файла; в противном случае необходимо указать полный путь и имя файла.If a System.Net.Sockets.SendPacketsElement references a file in the working directory, it may be identified with just the name of the file; otherwise, the full path and name of the file must be specified. Поддерживаются подстановочные знаки и имена общих папок в формате UNC.Wildcards and UNC share names are supported. Если файл не найден, выдается FileNotFoundException.If the file is not found, FileNotFoundException is thrown.

Чтобы получать уведомления о завершении, необходимо создать метод обратного вызова, который реализует обработчик события EventHandler<SocketAsyncEventArgs > делегат и присоединить обратный вызов к событию SocketAsyncEventArgs.Completed.To be notified of completion, you must create a callback method that implements the EventHandler<SocketAsyncEventArgs> delegate and attach the callback to the SocketAsyncEventArgs.Completed event.

Свойство SocketAsyncEventArgs.SendPacketsFlags в параметре e предоставляет поставщику службы оконных сокетов дополнительные сведения о переносе файлов.The SocketAsyncEventArgs.SendPacketsFlags property on the e parameter provides the Window Sockets service provider with additional information about the file transfer. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.For more information about how to use this parameter, see TransmitFileOptions.

Следующие свойства и события для объекта System.Net.Sockets.SocketAsyncEventArgs необходимы для успешного вызова этого метода:The following properties and events on the System.Net.Sockets.SocketAsyncEventArgs object are required to successfully call this method:

Вызывающий объект может задать для свойства SocketAsyncEventArgs.UserToken значение любого объекта пользовательского состояния, требуемого перед вызовом метода SendPacketsAsync, чтобы информация была извлечена в методе обратного вызова.The caller may set the SocketAsyncEventArgs.UserToken property to any user state object desired before calling the SendPacketsAsync method, so that the information will be retrievable in the callback method. Если для обратного вызова требуется больше сведений, чем для одного объекта, можно создать небольшой класс для хранения других требуемых сведений о состоянии в качестве членов.If the callback needs more information than a single object, a small class can be created to hold the other required state information as members.

Этот метод использует функцию Трансмитпаккетс, находящийся в API Windows Sockets 2.This method uses the TransmitPackets function found in the Windows Sockets 2 API. Дополнительные сведения о функции Трансмитпаккетс и ее флагах см. в документации по сокетам Windows .For more information about the TransmitPackets function and its flags, see the Windows Sockets documentation.

Хотя для протоколов, ориентированных на соединение, метод SendPacketsAsync работает и для протоколов без подключения, при условии, что сначала вызывается метод BeginConnect, Connectили ConnectAsync, чтобы установить удаленный узел по умолчанию.Although intended for connection-oriented protocols, the SendPacketsAsync method also works for connectionless protocols, provided that you first call the BeginConnect, Connect, or ConnectAsync method to establish a default remote host. При использовании протоколов без подключения необходимо также убедиться в том, что размер файла не превышает максимальный размер пакета для базового поставщика услуг.With connectionless protocols, you must also be sure that the size of your file does not exceed the maximum packet size of the underlying service provider. Если это так, датаграмма не отправляется, а SendPacketsAsync вызывает исключение SocketException.If it does, the datagram is not sent and SendPacketsAsync throws a SocketException exception.

Метод SendPacketsAsync оптимизирован в соответствии с операционной системой, в которой он используется.The SendPacketsAsync method is optimized according to the operating system on which it is used. В выпусках Windows Server метод SendPacketsAsync оптимизирован для обеспечения высокой производительности.On Windows server editions, the SendPacketsAsync method is optimized for high performance.

В выпусках клиента Windows метод SendPacketsAsync оптимизирован для минимального использования памяти и ресурсов.On Windows client editions, the SendPacketsAsync method is optimized for minimum memory and resource utilization.

Использование флага TransmitFileOptions.UseKernelApc в свойстве SocketAsyncEventArgs.SendPacketsFlags в параметре e может обеспечить значительные преимущества производительности.Use of the TransmitFileOptions.UseKernelApc flag in the SocketAsyncEventArgs.SendPacketsFlags property on the e parameter can deliver significant performance benefits. Если поток, инициирующий вызов метода SendPacketsAsync, используется для интенсивных вычислений, можно, хотя маловероятно, избежать запуска APC.If the thread initiating the SendPacketsAsync method call is being used for heavy computations, it is possible, though unlikely, that APCs could be prevented from launching. Обратите внимание, что существует разница между ядром и пользовательским режимом APC.Note that there is a difference between kernel and user-mode APCs. Ядро APC запуск, когда поток находится в состоянии ожидания.Kernel APCs launch when a thread is in a wait state. Пользовательский режим APC запуск, когда поток находится в состоянии ожидания с оповещениемUser-mode APCs launch when a thread is in an alertable wait state

Applies to

See also