Socket.BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) メソッド

定義

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

public:
 IAsyncResult ^ BeginSendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public:
 IAsyncResult ^ BeginSendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socket_flags, System::Net::EndPoint ^ remote_end, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socket_flags, System.Net.EndPoint remote_end, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socket_flags As SocketFlags, remote_end As EndPoint, 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 buffer at which to begin sending data.

size
Int32

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

socketFlagssocket_flags
SocketFlags

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

remoteEPremote_end
EndPoint

リモート デバイスを表す EndPointAn EndPoint that represents the remote device.

callback
AsyncCallback

AsyncCallback デリゲート。The AsyncCallback delegate.

state
Object

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

戻り値

IAsyncResult

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

例外

buffernullです。buffer is null.

または-or- remoteEPnullです。remoteEP is null.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

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

または-or- offsetbuffer の長さを超えています。offset is greater 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.

呼び出し履歴の上位にある呼び出し元には、要求された操作に対するアクセス許可がありません。A caller higher in the call stack does not have permission for the requested operation.

次のコード例では、指定したリモートホストにデータを非同期的に送信します。The following code example asynchronously sends data to the specified remote host.

IPHostEntry^ lipa = Dns::Resolve( "host.contoso.com" );
IPEndPoint^ lep = gcnew IPEndPoint( lipa->AddressList[ 0 ], 11000 );

Socket^ s = gcnew Socket( lep->Address->AddressFamily,
   SocketType::Stream,
   ProtocolType::Tcp );
try
{
   while ( true )
   {
      allDone->Reset();

      array<Byte>^ buff = Encoding::ASCII->GetBytes( "This is a test" );

      Console::WriteLine( "Sending Message Now.." );
      s->BeginSendTo( buff, 0, buff->Length, SocketFlags::None, lep,
         gcnew AsyncCallback( &Async_Send_Receive::Connect_Callback ), s );

      allDone->WaitOne();
   }
}
catch ( Exception^ e ) 
{
   Console::WriteLine( e );
}
IPHostEntry lipa = Dns.Resolve("host.contoso.com");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);

   Socket s = new Socket(lep.Address.AddressFamily,
                               SocketType.Stream,
                                     ProtocolType.Tcp);
   try{

             while(true){
             allDone.Reset();

             byte[] buff = Encoding.ASCII.GetBytes("This is a test");

             Console.WriteLine("Sending Message Now..");
             s.BeginSendTo(buff, 0, buff.Length, 0, lep, new AsyncCallback(Async_Send_Receive.SendTo_Callback), s);

             allDone.WaitOne();
        }
   }
   catch (Exception e){
        Console.WriteLine(e.ToString());
   }
   Dim lipa As IPHostEntry = Dns.Resolve("host.contoso.com")
   Dim lep As New IPEndPoint(lipa.AddressList(0), 11000)
   
   Dim s As New Socket(lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
   Try
      
      While True
         allDone.Reset()
         
         Dim buff As Byte() = Encoding.ASCII.GetBytes("This is a test")
         
         Console.WriteLine("Sending Message Now..")
         s.BeginSendTo(buff, 0, buff.Length, 0, lep, New AsyncCallback(AddressOf Async_Send_Receive.SendTo_Callback), s)
         
         allDone.WaitOne()
      End While
   Catch e As Exception
      Console.WriteLine(e.ToString())
   End Try
End Sub

注釈

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

デリゲートを実装するコールバックメソッドを作成 AsyncCallback し、その名前をメソッドに渡すことができ BeginSendTo ます。You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSendTo 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 to hold the Socket, and the other required information. パラメーターを使用して、このクラスのインスタンスをメソッドに渡し BeginSendTo state ます。Pass an instance of this class to the BeginSendTo method through the state parameter.

コールバックメソッドは、メソッドを呼び出す必要があり EndSendTo ます。Your callback method should invoke the EndSendTo method. アプリケーションがを呼び出すと BeginSendTo 、システムは別のスレッドを使用して指定されたコールバックメソッドを実行し、が EndSendTo 要求し Socket たバイト数を送信するか、例外をスローするまでブロックします。When your application calls BeginSendTo, the system will use a separate thread to execute the specified callback method, and will block on EndSendTo until the Socket sends the number of bytes requested or throws an exception. メソッドを呼び出した後に元のスレッドがブロックされるようにするには、 BeginSendTo メソッドを使用し WaitHandle.WaitOne ます。If you want the original thread to block after you call the BeginSendTo 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 about writing callback methods see Marshaling a Delegate as a Callback Method.

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

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

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

注意

このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。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.

適用対象

こちらもご覧ください