Socket.SendToAsync(SocketAsyncEventArgs) Socket.SendToAsync(SocketAsyncEventArgs) Socket.SendToAsync(SocketAsyncEventArgs) Socket.SendToAsync(SocketAsyncEventArgs) Method

定義

特定のリモート ホストにデータを非同期的に送信します。Sends data asynchronously to a specific remote host.

public:
 bool SendToAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendToAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendToAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendToAsync (e As SocketAsyncEventArgs) As Boolean

パラメーター

e
SocketAsyncEventArgs SocketAsyncEventArgs SocketAsyncEventArgs 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.

例外

RemoteEndPoint に null 値を指定することはできません。The RemoteEndPoint cannot be null.

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 がまだ接続されていません。The protocol specified is connection-oriented, but the Socket is not yet connected.

注釈

メソッドSendToAsyncは、 eパラメーターのSocketAsyncEventArgs.RemoteEndPointプロパティで指定されたリモートホストに対して非同期の送信操作を開始します。The SendToAsync method starts an asynchronous send operation to the remote host specified in the SocketAsyncEventArgs.RemoteEndPoint property of the e parameter. メソッドをSendToAsync呼び出すと、別の実行スレッド内でデータを送信できるようになります。Calling the SendToAsync method gives you the ability to send data within a separate execution thread. この方法は、コネクションレスプロトコルを対象SendToAsyncとしていますが、コネクションレスプロトコルと接続指向プロトコルの両方で動作します。Although this method is intended for connectionless protocols, SendToAsync works with both connectionless and connection-oriented protocols.

完了が通知されるようにするには、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.

このメソッドを正常に呼び出すに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 SendToAsyncメソッドを呼び出す前に、プロパティを任意のユーザー状態オブジェクトに設定できます。これにより、コールバックメソッドで情報を取得できるようになります。The caller may set the SocketAsyncEventArgs.UserToken property to any user state object desired before calling the SendToAsync 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.

接続指向プロトコルを使用している場合はAccept BeginAccept、まず、 Connect AcceptAsync BeginConnect、、、、またはConnectAsyncメソッドを呼び出す必要があります。If you are using a connection-oriented protocol, you must first call the Accept, AcceptAsync, BeginAccept, BeginConnect, Connect, or ConnectAsync method. それSendToAsync以外の場合SocketExceptionは、がスローされます。Otherwise SendToAsync will throw a SocketException. 接続SendToAsync指向プロトコルを使用する場合、メソッドはSocketAsyncEventArgs.RemoteEndPointプロパティを無視System.Net.EndPointし、 AcceptAcceptAsync BeginAccept BeginConnect、、、 Connectの各で確立されたにデータを送信します。、、 ConnectAsyncまたはメソッド。When using a connection-oriented protocol, the SendToAsync method will ignore the SocketAsyncEventArgs.RemoteEndPoint property and send data to the System.Net.EndPoint established in the Accept, AcceptAsync, BeginAccept, BeginConnect, Connect, or ConnectAsync method.

コネクションレスプロトコルを使用しているBeginConnect場合は、を呼び出すSendToAsync前に、 Connect、、またはのいずれかConnectAsyncのメソッドを使用して、既定のリモートホストを確立する必要はありません。If you are using a connectionless protocol, you do not need to establish a default remote host with the BeginConnect, Connect, or ConnectAsync method prior to calling SendToAsync. この操作は、 BeginSendメソッドまたはSendAsyncメソッドを呼び出す場合にのみ必要です。You only need to do this if you intend to call the BeginSend or SendAsync methods. BeginConnectを呼び出すSocketAsyncEventArgs.RemoteEndPoint Connect ConnectAsync前に、、またはメソッドを呼び出した場合、プロパティは、その送信操作に対してのみ、指定された既定のリモートホストをオーバーライドします。 SendToAsyncIf you do call the BeginConnect, Connect, or ConnectAsync method prior to calling SendToAsync, the SocketAsyncEventArgs.RemoteEndPoint property will override the specified default remote host for that send operation only. また、 Bindメソッドを呼び出す必要はありません。You are also not required to call the Bind method. この場合、基になるサービスプロバイダーによって、最も適切なローカルネットワーク IP アドレスとポート番号が割り当てられます。In this case, the underlying service provider will assign the most appropriate local network IP address and port number. 基になるサービスプロバイダーで空きポートを選択する場合は、ポート番号を0にします。Use a port number of zero if you want the underlying service provider to select a free port. 割り当てられているローカルネットワークの IP アドレスとポート番号を識別する必要があるLocalEndPoint場合は、 SocketAsyncEventArgs.Completedイベントが通知され、関連付けられているデリゲートが呼び出された後に、プロパティを使用できます。If you need to identify the assigned local network IP address and port number, you can use the LocalEndPoint property after the SocketAsyncEventArgs.Completed event is signaled and the associated delegates are called.

ブロードキャストアドレスにデータを送信する場合は、最初にSetSocketOptionメソッドを呼び出し、のSocketOptionName.Broadcast socket オプションを true に設定する必要があります。If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option for SocketOptionName.Broadcast to true. また、バッファーのサイズが、基になるサービスプロバイダーの最大パケットサイズを超えていないことを確認する必要があります。You must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. この場合、データグラムは送信SendToAsyncされず、がSocketExceptionスローされます。If it does, the datagram will not be sent and SendToAsync will throw a SocketException.

SocketAsyncEventArgs.SocketFlagsプロパティで DontRoute フラグを指定した場合、送信するデータはルーティングされません。If you specify the DontRoute flag in the SocketAsyncEventArgs.SocketFlags property, the data you are sending will not be routed.

メッセージ指向のソケットの場合は、基になるトランスポートの最大メッセージサイズを超えないように注意する必要があります。For message-oriented sockets, care must be taken not to exceed the maximum message size of the underlying transport. バッファーのサイズが基になるサービスプロバイダーの最大パケットサイズを超えるとSendToAsync 、データグラムは送信されず、がSocketExceptionスローされます。If the size of the buffer exceeds the maximum packet size of the underlying service provider, the datagram is not sent and SendToAsync will throw a SocketException. SendToAsyncメソッドが正常に完了しても、データが正常に配信されたことは示されません。The successful completion of a SendToAsync method does not indicate that the data was successfully delivered.

適用対象

こちらもご覧ください