Socket.SendPacketsAsync(SocketAsyncEventArgs) メソッド

定義

接続されている 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

パラメーター

e
SocketAsyncEventArgs

この非同期ソケット操作に使用する SocketAsyncEventArgs オブジェクト。The SocketAsyncEventArgs object to use for this asynchronous socket operation.

戻り値

I/O 操作が保留中の場合は truetrue if the I/O operation is pending. 操作の完了時に、e パラメーターの Completed イベントが発生します。The Completed event on the e parameter will be raised upon completion of the operation.

I/O 操作が同期的に完了した場合は falsefalse if the I/O operation completed synchronously. この場合、e パラメーターの Completed イベントは発生しません。メソッド呼び出しから制御が戻った直後に、パラメーターとして渡された 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.

例外

FilePath プロパティで指定されたファイルが見つかりませんでした。The file specified in the FilePath property was not found.

e パラメーターに指定された SocketAsyncEventArgs オブジェクトを使用してソケット操作が既に進行していました。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.

注釈

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 > delegate を実装するコールバックメソッドを作成し、コールバックを 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.

e パラメーターの SocketAsyncEventArgs.SendPacketsFlags プロパティは、Windows ソケットサービスプロバイダーにファイル転送に関する追加情報を提供します。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:

呼び出し元は、SendPacketsAsync メソッドを呼び出す前に、SocketAsyncEventArgs.UserToken プロパティを任意のユーザー状態オブジェクトに設定して、コールバックメソッドで情報を取得できるようにすることができます。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. コールバックが1つのオブジェクトよりも多くの情報を必要とする場合は、他の必要な状態情報をメンバーとして保持するために、小さなクラスを作成できます。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.

このメソッドは、Windows Sockets 2 API の送信パケット関数を使用します。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 メソッドは、接続指向プロトコルを対象としていますが、最初に BeginConnectConnect、または 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. この場合、データグラムは送信されず、SendPacketsAsyncSocketException 例外をスローします。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.

e パラメーターの SocketAsyncEventArgs.SendPacketsFlags プロパティで TransmitFileOptions.UseKernelApc フラグを使用すると、パフォーマンスが大幅に向上します。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

適用対象

こちらもご覧ください