Socket.BeginSend メソッド

定義

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

オーバーロード

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSend (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback callback, object state);
member this.BeginSend : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult

パラメーター

buffers
IList<ArraySegment<Byte>>

送信するデータを格納する Byte 型の配列。An array of type Byte that contains the data to send.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

callback
AsyncCallback

AsyncCallback デリゲート。The AsyncCallback delegate.

state
Object

この要求の状態情報を格納するオブジェクト。An object that contains state information for this request.

戻り値

非同期の送信を参照する IAsyncResultAn IAsyncResult that references the asynchronous send.

例外

buffersnullです。buffers is null.

buffers が空です。buffers is empty.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket. 以下の解説を参照してください。See remarks section below.

Socket が閉じられました。The Socket has been closed.

注釈

BeginSend メソッドは、ConnectBeginConnectAccept、または BeginAccept メソッドで確立されたリモートホストへの非同期の送信操作を開始します。The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. 最初に AcceptBeginAcceptConnect、または BeginConnectを呼び出さない場合、BeginSend は例外をスローします。BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. BeginSend メソッドを呼び出すと、別の実行スレッド内でデータを送信できるようになります。Calling the BeginSend method gives you the ability to send data within a separate execution thread.

AsyncCallback デリゲートを実装するコールバックメソッドを作成し、その名前を BeginSend メソッドに渡すことができます。You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. これを行うには、少なくとも、state パラメーターに、通信に使用される接続された Socket または既定のが含まれている必要があります。To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. コールバックでより多くの情報が必要な場合は、Socket とその他の必要な情報を保持する小さなクラスまたは構造体を作成できます。If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. state パラメーターを使用して、このクラスのインスタンスを BeginSend メソッドに渡します。Pass an instance of this class to the BeginSend method through the state parameter.

コールバックメソッドは、EndSend メソッドを呼び出す必要があります。Your callback method should invoke the EndSend method. アプリケーションが BeginSendを呼び出すと、システムは別のスレッドを使用して指定されたコールバックメソッドを実行し、Socket が要求したバイト数を送信するか例外をスローするまで、EndSend でブロックします。When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. BeginSend メソッドを呼び出した後に元のスレッドがブロックされるようにするには、WaitHandle.WaitOne メソッドを使用します。If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. 元のスレッドの実行を継続する場合は、コールバックメソッドの T:System.Threading.ManualResetEvent に対して Set メソッドを呼び出します。Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. コールバックメソッドの記述の詳細については、「コールバックメソッドとしてのデリゲートのマーシャリング」を参照してください。For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

接続指向プロトコルを対象としていますが、最初に Connect または BeginConnect メソッドを呼び出して既定のリモートホストを確立した場合、コネクションレスプロトコルでも BeginSend 機能します。Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. コネクションレスプロトコルを使用していて、複数の異なるホストにデータを送信することを計画している場合は、BeginSendToを使用する必要があります。If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Connectを使用して既定のリモートホストを確立した後でも、BeginSendTo を使用できます。It is okay to use BeginSendTo even after you have established a default remote host with Connect. また、Connect または BeginConnectに別の呼び出しを行うことによって、BeginSend を呼び出す前に、既定のリモートホストを変更することもできます。You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. コネクションレスプロトコルを使用する場合は、バッファーのサイズが基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要もあります。With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、BeginSend によって SocketExceptionがスローされます。If it does, the datagram will not be sent and BeginSend will throw a SocketException.

DontRoute フラグを socketflags パラメーターとして指定した場合、送信しようとしているデータはルーティングされません。If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

特定のスレッドによって開始されるすべての i/o は、そのスレッドが終了すると取り消されます。All I/O initiated by a given thread is canceled when that thread exits. 保留中の非同期操作は、操作が完了する前にスレッドが終了した場合に失敗する可能性があります。A pending asynchronous operation can fail if the thread exits before the operation completes.

注意

state は、ユーザー定義のクラスをインスタンス化したものです。state is an instantiation of a user-defined class.

注意

送信が正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a send does not indicate that the data was successfully delivered. 転送されるデータを保持するためにトランスポートシステム内で使用できるバッファー領域がない場合、ソケットが非ブロッキングモードに設定されていない限り、send はブロックされます。If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

注意

非同期 Socket メソッドに対して、実行コンテキスト (セキュリティコンテキスト、権限を借用したユーザー、および呼び出し元のコンテキスト) がキャッシュされます。The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. 特定のコンテキスト (特定の非同期 Socket メソッド、特定の Socket インスタンス、および特定のコールバック) を初めて使用した後、そのコンテキストを使用すると、パフォーマンスが向上します。After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

こちらもご覧ください

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object)

重要

この API は CLS 準拠ではありません。

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode, AsyncCallback ^ callback, System::Object ^ state);
[System.CLSCompliant(false)]
public IAsyncResult BeginSend (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
member this.BeginSend : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult

パラメーター

buffers
IList<ArraySegment<Byte>>

送信するデータを格納する Byte 型の配列。An array of type Byte that contains the data to send.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

errorCode
SocketError

ソケット エラーを格納する SocketError オブジェクト。A SocketError object that stores the socket error.

callback
AsyncCallback

AsyncCallback デリゲート。The AsyncCallback delegate.

state
Object

この要求の状態情報を格納するオブジェクト。An object that contains state information for this request.

戻り値

非同期の送信を参照する IAsyncResultAn IAsyncResult that references the asynchronous send.

属性

例外

buffersnull です。buffers is null.

buffers が空です。buffers is empty.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket. 以下の解説を参照してください。See remarks section below.

Socket が閉じられました。The Socket has been closed.

注釈

BeginSend メソッドは、ConnectBeginConnectAccept、または BeginAccept メソッドで確立されたリモートホストへの非同期の送信操作を開始します。The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. 最初に AcceptBeginAcceptConnect、または BeginConnectを呼び出さない場合、BeginSend は例外をスローします。BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. BeginSend メソッドを呼び出すと、別の実行スレッド内でデータを送信できるようになります。Calling the BeginSend method gives you the ability to send data within a separate execution thread.

AsyncCallback デリゲートを実装するコールバックメソッドを作成し、その名前を BeginSend メソッドに渡すことができます。You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. これを行うには、少なくとも、state パラメーターに、通信に使用される接続された Socket または既定のが含まれている必要があります。To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. コールバックでより多くの情報が必要な場合は、Socket とその他の必要な情報を保持する小さなクラスまたは構造体を作成できます。If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. state パラメーターを使用して、このクラスのインスタンスを BeginSend メソッドに渡します。Pass an instance of this class to the BeginSend method through the state parameter.

コールバックメソッドは、EndSend メソッドを呼び出す必要があります。Your callback method should invoke the EndSend method. アプリケーションが BeginSendを呼び出すと、システムは別のスレッドを使用して指定されたコールバックメソッドを実行し、Socket が要求したバイト数を送信するか例外をスローするまで、EndSend でブロックします。When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. BeginSend メソッドを呼び出した後に元のスレッドがブロックされるようにするには、WaitHandle.WaitOne メソッドを使用します。If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. 元のスレッドの実行を継続する場合は、コールバックメソッドの ManualResetEvent で Set メソッドを呼び出します。Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing. コールバックメソッドの記述の詳細については、「コールバックメソッドとしてのデリゲートのマーシャリング」を参照してください。For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

接続指向プロトコルを対象としていますが、最初に Connect または BeginConnect メソッドを呼び出して既定のリモートホストを確立した場合、コネクションレスプロトコルでも BeginSend 機能します。Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. コネクションレスプロトコルを使用していて、複数の異なるホストにデータを送信することを計画している場合は、BeginSendToを使用する必要があります。If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Connectを使用して既定のリモートホストを確立した後でも、BeginSendTo を使用できます。It is okay to use BeginSendTo even after you have established a default remote host with Connect. また、Connect または BeginConnectに別の呼び出しを行うことによって、BeginSend を呼び出す前に、既定のリモートホストを変更することもできます。You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. コネクションレスプロトコルを使用する場合は、バッファーのサイズが基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要もあります。With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、BeginSend によって SocketExceptionがスローされます。If it does, the datagram will not be sent and BeginSend will throw a SocketException.

DontRoute フラグを socketflags パラメーターとして指定した場合、送信しようとしているデータはルーティングされません。If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

特定のスレッドによって開始されるすべての i/o は、そのスレッドが終了すると取り消されます。All I/O initiated by a given thread is canceled when that thread exits. 保留中の非同期操作は、操作が完了する前にスレッドが終了した場合に失敗する可能性があります。A pending asynchronous operation can fail if the thread exits before the operation completes.

注意

state は、ユーザー定義のクラスをインスタンス化したものです。state is an instantiation of a user-defined class.

注意

送信が正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a send does not indicate that the data was successfully delivered. 転送されるデータを保持するためにトランスポートシステム内で使用できるバッファー領域がない場合、ソケットが非ブロッキングモードに設定されていない限り、send はブロックされます。If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

注意

非同期 Socket メソッドに対して、実行コンテキスト (セキュリティコンテキスト、権限を借用したユーザー、および呼び出し元のコンテキスト) がキャッシュされます。The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. 特定のコンテキスト (特定の非同期 Socket メソッド、特定の Socket インスタンス、および特定のコールバック) を初めて使用した後、そのコンテキストを使用すると、パフォーマンスが向上します。After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

こちらもご覧ください

BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSend (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
member this.BeginSend : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult

パラメーター

buffer
Byte[]

送信するデータを格納する Byte 型の配列。An array of type Byte that contains the data to send.

offset
Int32

送信を開始する、buffer パラメーター内の、インデックス番号が 0 から始まる位置。The zero-based position in the buffer parameter at which to begin sending data.

size
Int32

送信するバイト数。The number of bytes to send.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

errorCode
SocketError

ソケット エラーを格納する SocketError オブジェクト。A SocketError object that stores the socket error.

callback
AsyncCallback

AsyncCallback デリゲート。The AsyncCallback delegate.

state
Object

この要求の状態情報を格納するオブジェクト。An object that contains state information for this request.

戻り値

非同期の送信を参照する IAsyncResultAn IAsyncResult that references the asynchronous send.

例外

buffernullです。buffer is null.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket. 以下の解説を参照してください。See remarks section below.

offset が 0 未満です。offset is less than 0.

- または --or- offsetbuffer の長さより小さい値です。offset is less than the length of buffer.

- または --or- size が 0 未満です。size is less than 0.

- または --or- size が、 buffer の長さから offset パラメーターの値を引いた値を超えています。size is greater than the length of buffer minus the value of the offset parameter.

Socket が閉じられました。The Socket has been closed.

注釈

BeginSend メソッドは、ConnectBeginConnectAccept、または BeginAccept メソッドで確立されたリモートホストへの非同期の送信操作を開始します。The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. 最初に AcceptBeginAcceptConnect、または BeginConnectを呼び出さない場合、BeginSend は例外をスローします。BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. BeginSend メソッドを呼び出すと、別の実行スレッド内でデータを送信できるようになります。Calling the BeginSend method gives you the ability to send data within a separate execution thread.

AsyncCallback デリゲートを実装するコールバックメソッドを作成し、その名前を BeginSend メソッドに渡すことができます。You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. これを行うには、少なくとも、state パラメーターに、通信に使用される接続された Socket または既定のが含まれている必要があります。To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. コールバックでより多くの情報が必要な場合は、Socket とその他の必要な情報を保持する小さなクラスまたは構造体を作成できます。If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. state パラメーターを使用して、このクラスのインスタンスを BeginSend メソッドに渡します。Pass an instance of this class to the BeginSend method through the state parameter.

コールバックメソッドは、EndSend メソッドを呼び出す必要があります。Your callback method should invoke the EndSend method. アプリケーションが BeginSendを呼び出すと、システムは別のスレッドを使用して指定されたコールバックメソッドを実行し、Socket が要求したバイト数を送信するか例外をスローするまで、EndSend でブロックします。When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. BeginSend メソッドを呼び出した後に元のスレッドがブロックされるようにするには、WaitHandle.WaitOne メソッドを使用します。If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. 元のスレッドの実行を継続する場合は、コールバックメソッドの T:System.Threading.ManualResetEvent に対して Set メソッドを呼び出します。Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. コールバックメソッドの記述の詳細については、「コールバックメソッドとしてのデリゲートのマーシャリング」を参照してください。For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

接続指向プロトコルを対象としていますが、最初に Connect または BeginConnect メソッドを呼び出して既定のリモートホストを確立した場合、コネクションレスプロトコルでも BeginSend 機能します。Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. コネクションレスプロトコルを使用していて、複数の異なるホストにデータを送信することを計画している場合は、BeginSendToを使用する必要があります。If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Connectを使用して既定のリモートホストを確立した後でも、BeginSendTo を使用できます。It is okay to use BeginSendTo even after you have established a default remote host with Connect. また、Connect または BeginConnectに別の呼び出しを行うことによって、BeginSend を呼び出す前に、既定のリモートホストを変更することもできます。You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. コネクションレスプロトコルを使用する場合は、バッファーのサイズが基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要もあります。With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、BeginSend によって SocketExceptionがスローされます。If it does, the datagram will not be sent and BeginSend will throw a SocketException.

DontRoute フラグを socketflags パラメーターとして指定した場合、送信しようとしているデータはルーティングされません。If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

特定のスレッドによって開始されるすべての i/o は、そのスレッドが終了すると取り消されます。All I/O initiated by a given thread is canceled when that thread exits. 保留中の非同期操作は、操作が完了する前にスレッドが終了した場合に失敗する可能性があります。A pending asynchronous operation can fail if the thread exits before the operation completes.

注意

state は、ユーザー定義のクラスをインスタンス化したものです。state is an instantiation of a user-defined class.

注意

送信が正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a send does not indicate that the data was successfully delivered. 転送されるデータを保持するためにトランスポートシステム内で使用できるバッファー領域がない場合、ソケットが非ブロッキングモードに設定されていない限り、send はブロックされます。If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

注意

非同期 Socket メソッドに対して、実行コンテキスト (セキュリティコンテキスト、権限を借用したユーザー、および呼び出し元のコンテキスト) がキャッシュされます。The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. 特定のコンテキスト (特定の非同期 Socket メソッド、特定の Socket インスタンス、および特定のコールバック) を初めて使用した後、そのコンテキストを使用すると、パフォーマンスが向上します。After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

こちらもご覧ください

BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

接続されている Socket にデータを非同期的に送信します。Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socket_flags, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSend (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socket_flags, AsyncCallback callback, object state);
member this.BeginSend : byte[] * int * int * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult
Public Function BeginSend (buffer As Byte(), offset As Integer, size As Integer, socket_flags As SocketFlags, callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

buffer
Byte[]

送信するデータを格納する Byte 型の配列。An array of type Byte that contains the data to send.

offset
Int32

送信を開始する、buffer パラメーター内の、インデックス番号が 0 から始まる位置。The zero-based position in the buffer parameter at which to begin sending data.

size
Int32

送信するバイト数。The number of bytes to send.

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。A bitwise combination of the SocketFlags values.

callback
AsyncCallback

AsyncCallback デリゲート。The AsyncCallback delegate.

state
Object

この要求の状態情報を格納するオブジェクト。An object that contains state information for this request.

戻り値

非同期の送信を参照する IAsyncResultAn IAsyncResult that references the asynchronous send.

例外

buffernull です。buffer is null.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket. 以下の解説を参照してください。See remarks section below.

offset が 0 未満です。offset is less than 0.

- または --or- offsetbuffer の長さより小さい値です。offset is less than the length of buffer.

- または --or- size が 0 未満です。size is less than 0.

- または --or- size が、 buffer の長さから offset パラメーターの値を引いた値を超えています。size is greater than the length of buffer minus the value of the offset parameter.

Socket が閉じられました。The Socket has been closed.

次のコード例では、リモートホストへのデータの非同期送信を開始します。The following code example begins asynchronously sending data to a remote host.

allDone->Set();
Socket^ s = safe_cast<Socket^>(ar->AsyncState);
s->EndConnect( ar );
StateObject^ so2 = gcnew StateObject;
so2->workSocket = s;
array<Byte>^ buff = Encoding::ASCII->GetBytes( "This is a test" );
s->BeginSend( buff, 0, buff->Length, SocketFlags::None,
   gcnew AsyncCallback( &Async_Send_Receive::Send_Callback ), so2 );
allDone.Set();
Socket s = (Socket) ar.AsyncState;
s.EndConnect(ar);
StateObject so2 = new StateObject();
so2.workSocket = s;
byte[] buff = Encoding.ASCII.GetBytes("This is a test");
s.BeginSend(buff, 0, buff.Length,0,
                      new AsyncCallback(Async_Send_Receive.Send_Callback), so2);    
Public Shared Sub Connect_Callback(ar As IAsyncResult)
   

   allDone.Set()
   Dim s As Socket = CType(ar.AsyncState, Socket)
   s.EndConnect(ar)
   Dim so2 As New StateObject()
   so2.workSocket = s
   Dim buff As Byte() = Encoding.ASCII.GetBytes("This is a test")
   s.BeginSend(buff, 0, buff.Length, 0, New AsyncCallback(AddressOf Async_Send_Receive.Send_Callback), so2)
End Sub

注釈

BeginSend メソッドは、ConnectBeginConnectAccept、または BeginAccept メソッドで確立されたリモートホストへの非同期の送信操作を開始します。The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. 最初に AcceptBeginAcceptConnect、または BeginConnectを呼び出さない場合、BeginSend は例外をスローします。BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. BeginSend メソッドを呼び出すと、別の実行スレッド内でデータを送信できるようになります。Calling the BeginSend method gives you the ability to send data within a separate execution thread.

AsyncCallback デリゲートを実装するコールバックメソッドを作成し、その名前を BeginSend メソッドに渡すことができます。You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. これを行うには、少なくとも、state パラメーターに、通信に使用される接続された Socket または既定のが含まれている必要があります。To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. コールバックでより多くの情報が必要な場合は、Socket とその他の必要な情報を保持する小さなクラスまたは構造体を作成できます。If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. state パラメーターを使用して、このクラスのインスタンスを BeginSend メソッドに渡します。Pass an instance of this class to the BeginSend method through the state parameter.

コールバックメソッドは、EndSend メソッドを呼び出す必要があります。Your callback method should invoke the EndSend method. アプリケーションが BeginSendを呼び出すと、システムは別のスレッドを使用して指定されたコールバックメソッドを実行し、Socket が要求したバイト数を送信するか例外をスローするまで、EndSend でブロックします。When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. BeginSend メソッドを呼び出した後に元のスレッドがブロックされるようにするには、WaitHandle.WaitOne メソッドを使用します。If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. 元のスレッドの実行を継続する場合は、コールバックメソッドの T:System.Threading.ManualResetEvent に対して Set メソッドを呼び出します。Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. コールバックメソッドの記述の詳細については、「コールバックメソッドとしてのデリゲートのマーシャリング」を参照してください。For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

接続指向プロトコルを対象としていますが、最初に Connect または BeginConnect メソッドを呼び出して既定のリモートホストを確立した場合、コネクションレスプロトコルでも BeginSend 機能します。Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. コネクションレスプロトコルを使用していて、複数の異なるホストにデータを送信することを計画している場合は、BeginSendToを使用する必要があります。If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Connectを使用して既定のリモートホストを確立した後でも、BeginSendTo を使用できます。It is okay to use BeginSendTo even after you have established a default remote host with Connect. また、Connect または BeginConnectに別の呼び出しを行うことによって、BeginSend を呼び出す前に、既定のリモートホストを変更することもできます。You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. コネクションレスプロトコルを使用する場合は、バッファーのサイズが基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要もあります。With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信されず、BeginSend によって SocketExceptionがスローされます。If it does, the datagram will not be sent and BeginSend will throw a SocketException.

DontRoute フラグを socketflags パラメーターとして指定した場合、送信しようとしているデータはルーティングされません。If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

注意

SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

注意

特定のスレッドによって開始されるすべての i/o は、そのスレッドが終了すると取り消されます。All I/O initiated by a given thread is canceled when that thread exits. 保留中の非同期操作は、操作が完了する前にスレッドが終了した場合に失敗する可能性があります。A pending asynchronous operation can fail if the thread exits before the operation completes.

注意

state は、ユーザー定義のクラスをインスタンス化したものです。state is an instantiation of a user-defined class.

注意

送信が正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a send does not indicate that the data was successfully delivered. 転送されるデータを保持するためにトランスポートシステム内で使用できるバッファー領域がない場合、ソケットが非ブロッキングモードに設定されていない限り、send はブロックされます。If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.

注意

非同期 Socket メソッドに対して、実行コンテキスト (セキュリティコンテキスト、権限を借用したユーザー、および呼び出し元のコンテキスト) がキャッシュされます。The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. 特定のコンテキスト (特定の非同期 Socket メソッド、特定の Socket インスタンス、および特定のコールバック) を初めて使用した後、そのコンテキストを使用すると、パフォーマンスが向上します。After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

こちらもご覧ください

適用対象