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 'SendTo

注釈

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. 元のスレッドが実行を継続する場合は、コールバック メソッドにはセット メソッドを呼び出します。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.

最初に呼び出す必要がある接続指向プロトコルを使用している場合、 ConnectBeginConnectAccept、または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. BeginSendTo 無視されます、remoteEPパラメーターと送信のデータをEndPointで確立されている、 ConnectBeginConnectAccept、またはBeginAcceptメソッド。BeginSendTo will ignore the remoteEP parameter and send data to the EndPoint established in the Connect, BeginConnect, Accept, or BeginAccept method.

コネクションレスのプロトコルを使用している場合はで、既定のリモート ホストを確立する必要はありません、ConnectまたはBeginConnectメソッドを呼び出す前にSendToします。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メソッドを呼び出す前にSendToremoteEPパラメーターは、操作のみを送信する指定された既定のリモート ホストに上書きされます。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. また必要はありませんを呼び出す、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. 使用することが割り当てられているローカル ネットワーク アドレスとポート番号を特定する必要がある場合、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メソッドと set ソケット オプションを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.

適用対象

こちらもご覧ください