Socket.BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Socket.BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Socket.BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Socket.BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Method

定義

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

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 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
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 Int32 Int32 Int32

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

size
Int32 Int32 Int32 Int32

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

socketFlags
SocketFlags SocketFlags SocketFlags SocketFlags

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

remoteEP
EndPoint EndPoint EndPoint EndPoint

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

state
Object Object Object Object

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

戻り値

非同期の送信を参照する 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.

コール スタックの上位にある呼び出し元が、要求された操作のアクセス許可を保持していません。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. パラメーターstateを使用して、このクラスBeginSendToのインスタンスをメソッドに渡します。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 Accept、最初に、 BeginConnect、、 SocketExceptionのいずれかBeginAcceptのメソッドをBeginSendTo呼び出す必要があります。それ以外の場合は、がスローされます。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 Connect、パラメーターを無視し、、 BeginConnectEndPoint Accept、またはBeginAcceptメソッドで確立されたにデータを送信します。BeginSendTo will ignore the remoteEP parameter and send data to the EndPoint established in the Connect, BeginConnect, Accept, or BeginAccept method.

コネクションレスプロトコルを使用している場合は、を呼び出すConnect SendTo前に、メソッドまたはBeginConnectメソッドを使用して既定のリモートホストを確立する必要はありません。If 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. この操作は、 BeginSendメソッドを呼び出す場合にのみ必要です。You only need to do this if you intend to call the BeginSend method. Connectを呼び出すBeginConnect 前にまたはメソッドを呼び出した場合、パラメーターは、その送信操作に対してのみ、指定された既定のリモートホストをオーバーライドします。SendTo remoteEPIf 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. また、 Bindメソッドを呼び出す必要はありません。You 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. 割り当てられたローカルネットワークアドレスとポート番号を識別する必要がある場合はLocalEndPointEndSendToメソッドが正常に完了した後でプロパティを使用できます。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フラグを指定した場合、送信するデータはルーティングされません。 socketflagsIf 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.

適用対象

こちらもご覧ください