Socket.BeginAccept Socket.BeginAccept Socket.BeginAccept Socket.BeginAccept Method

定義

受信接続の試行を受け入れる非同期操作を開始します。Begins an asynchronous operation to accept an incoming connection attempt.

オーバーロード

BeginAccept(AsyncCallback, Object) BeginAccept(AsyncCallback, Object) BeginAccept(AsyncCallback, Object) BeginAccept(AsyncCallback, Object)

受信接続の試行を受け入れる非同期操作を開始します。Begins an asynchronous operation to accept an incoming connection attempt.

BeginAccept(Int32, AsyncCallback, Object) BeginAccept(Int32, AsyncCallback, Object) BeginAccept(Int32, AsyncCallback, Object) BeginAccept(Int32, AsyncCallback, Object)

受信接続の試行を受け入れる非同期操作を開始し、クライアント アプリケーションによって送信されるデータの最初のブロックを受信します。Begins an asynchronous operation to accept an incoming connection attempt and receives the first block of data sent by the client application.

BeginAccept(Socket, Int32, AsyncCallback, Object) BeginAccept(Socket, Int32, AsyncCallback, Object) BeginAccept(Socket, Int32, AsyncCallback, Object) BeginAccept(Socket, Int32, AsyncCallback, Object)

指定したソケットから受信接続の試行を受け入れる非同期操作を開始し、クライアント アプリケーションによって送信されるデータの最初のブロックを受信します。Begins an asynchronous operation to accept an incoming connection attempt from a specified socket and receives the first block of data sent by the client application.

BeginAccept(AsyncCallback, Object) BeginAccept(AsyncCallback, Object) BeginAccept(AsyncCallback, Object) BeginAccept(AsyncCallback, Object)

受信接続の試行を受け入れる非同期操作を開始します。Begins an asynchronous operation to accept an incoming connection attempt.

public:
 IAsyncResult ^ BeginAccept(AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginAccept (AsyncCallback callback, object state);
member this.BeginAccept : AsyncCallback * obj -> IAsyncResult
Public Function BeginAccept (callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

state
Object Object Object Object

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

戻り値

非同期の Socket 作成を参照する IAsyncResultAn IAsyncResult that references the asynchronous Socket creation.

例外

Socket オブジェクトは閉じられています。The Socket object has been closed.

このメソッドには Windows NT が必要です。Windows NT is required for this method.

受け入れ元のソケットが、接続をリッスンしていません。The accepting socket is not listening for connections. BeginAccept(AsyncCallback, Object) の前に Bind(EndPoint) および Listen(Int32) を呼び出す必要があります。You must call Bind(EndPoint) and Listen(Int32) before calling BeginAccept(AsyncCallback, Object).

または-or- 受け入れられたソケットがバインドされています。The accepted socket is bound.

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

次のコード例は、非同期的に受信接続を受信しようとします。The following code example attempts to receive an incoming connection asynchronously.

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
{
   s->Bind( lep );
   s->Listen( 1000 );

   while ( true )
   {
      allDone->Reset();

      Console::WriteLine( "Waiting for a connection..." );
      s->BeginAccept( 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{
           s.Bind(lep);
           s.Listen(1000);

           while(true){
                allDone.Reset();

                Console.WriteLine("Waiting for a connection...");
                s.BeginAccept(new AsyncCallback(Async_Send_Receive.Listen_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
      s.Bind(lep)
      s.Listen(1000)
      
      While True
         allDone.Reset()
         
         Console.WriteLine("Waiting for a connection...")
         s.BeginAccept(New AsyncCallback(AddressOf Async_Send_Receive.Listen_Callback), s)
         
         allDone.WaitOne()
      End While
   Catch e As Exception
      Console.WriteLine(e.ToString())
   End Try
End Sub 'Listen

注釈

接続指向プロトコルを使用できる、BeginAcceptメソッドを非同期的に受信接続を処理しようとします。Connection-oriented protocols can use the BeginAccept method to asynchronously process incoming connection attempts. 非同期的に接続を受け入れると、個別の実行スレッド内でデータを送受信する機能を提供します。Accepting connections asynchronously gives you the ability to send and receive data within a separate execution thread. 呼び出しの前に、BeginAcceptメソッドを呼び出す必要があります、Listenをリッスンし、キューの受信接続要求メソッド。Before calling the BeginAccept method, you must call the Listen method to listen for and queue incoming connection requests.

実装するコールバック メソッドを作成する必要があります、AsyncCallbackを委任し、その名前を渡す、BeginAcceptメソッド。You must create a callback method that implements the AsyncCallback delegate and pass its name to the BeginAccept method. 最低限、リスニングを渡す必要がありますSocketオブジェクトをBeginAcceptを通じて、stateパラメーター。To do this, at the very minimum, you must pass the listening Socket object to BeginAccept through the state parameter. 保持するために小さなクラスを作成するには、コールバックは、詳細を必要とする場合、Socketと、その他の必要な情報。If your callback needs more information, you can create a small class to hold the Socket and the other required information. このクラスのインスタンスを渡す、BeginAcceptメソッドによって、stateパラメーター。Pass an instance of this class to the BeginAccept method through the state parameter.

コールバック メソッドを呼び出す必要がある、EndAcceptメソッド。Your callback method should invoke the EndAccept method. アプリケーションを呼び出すとBeginAccept、システムは、通常は別のスレッドを使用して、指定されたコールバック メソッドを実行してでブロックEndAccept保留中の接続が取得されるまでです。When your application calls BeginAccept, the system usually uses a separate thread to execute the specified callback method and blocks on EndAccept until a pending connection is retrieved. EndAccept 新しい戻りますSocketリモート ホストでのデータの送受信に使用できるオブジェクトします。EndAccept will return a new Socket object that you can use to send and receive data with the remote host. 返されるこれを使用することはできませんSocket接続キューからその他の接続を受け入れるようにします。You cannot use this returned Socket to accept any additional connections from the connection queue. 元のスレッドを呼び出した後にブロックするかどうか、BeginAcceptメソッドを使用してWaitHandle.WaitOneします。If you want the original thread to block after you call the BeginAccept method, use WaitHandle.WaitOne. Set メソッドを呼び出し、ManualResetEvent元のスレッドの実行を続行する場合は、コールバック メソッドで。Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing.

システムは、呼び出し元のスレッドを使用して、コールバック メソッドを呼び出す可能性があります。The system may also use the calling thread to invoke the callback method. ここで、CompletedSynchronouslyプロパティを返されたIAsyncResultことを示すために設定されます、BeginAcceptメソッドは同期的に終了しました。In this case, the CompletedSynchronously property on the returned IAsyncResult will be set to indicate that the BeginAccept method completed synchronously.

コールバック メソッドの記述の詳細については、次を参照してください。コールバック メソッドとしてデリゲートのマーシャ リングします。For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

保留中の呼び出しをキャンセル、BeginAcceptメソッド、閉じる、Socketします。To cancel a pending call to the BeginAccept method, close the Socket. ときに、Closeメソッドを呼び出す非同期操作の進行中に、コールバックが提供されて、BeginAcceptメソッドが呼び出されます。When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginAccept method is called. 後続の呼び出し、EndAcceptメソッドがスローされます、ObjectDisposedExceptionを示す、操作がキャンセルされました。A subsequent call to the EndAccept method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

注意

使用することができます、 RemoteEndPoint 、返されたプロパティSocketリモート ホストのネットワーク アドレスとポート番号を識別するためにします。You can use the RemoteEndPoint property of the returned Socket to identify the remote host's network address and port number.

注意

表示された場合、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.

こちらもご覧ください

BeginAccept(Int32, AsyncCallback, Object) BeginAccept(Int32, AsyncCallback, Object) BeginAccept(Int32, AsyncCallback, Object) BeginAccept(Int32, AsyncCallback, Object)

受信接続の試行を受け入れる非同期操作を開始し、クライアント アプリケーションによって送信されるデータの最初のブロックを受信します。Begins an asynchronous operation to accept an incoming connection attempt and receives the first block of data sent by the client application.

public:
 IAsyncResult ^ BeginAccept(int receiveSize, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginAccept (int receiveSize, AsyncCallback callback, object state);
member this.BeginAccept : int * AsyncCallback * obj -> IAsyncResult
Public Function BeginAccept (receiveSize As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

receiveSize
Int32 Int32 Int32 Int32

送信元から受け入れるバイト数。The number of bytes to accept from the sender.

state
Object Object Object Object

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

戻り値

非同期の Socket 作成を参照する IAsyncResultAn IAsyncResult that references the asynchronous Socket creation.

例外

Socket オブジェクトは閉じられています。The Socket object has been closed.

このメソッドには Windows NT が必要です。Windows NT is required for this method.

受け入れ元のソケットが、接続をリッスンしていません。The accepting socket is not listening for connections. BeginAccept(AsyncCallback, Object) の前に Bind(EndPoint) および Listen(Int32) を呼び出す必要があります。You must call Bind(EndPoint) and Listen(Int32) before calling BeginAccept(AsyncCallback, Object).

または-or- 受け入れられたソケットがバインドされています。The accepted socket is bound.

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

次のコード例は、ソケットを開き、非同期接続を受け入れます。The following code example opens a socket and accepts an asynchronous connection. この例では、ソケットは、最初の 10 バイトのデータを受け入れます。In this example, the socket accepts the initial 10 bytes of data. 受信したバイト数と、データは、コールバック デリゲートによって、コンソールに表示されます。The number of bytes received and the data are displayed on the console by the callback delegate. 参照してくださいBeginReceiveの残りのデータを受信する方法の説明。See BeginReceive for a description of how the remaining data is received.

   // This server waits for a connection and then uses asynchronous operations to
   // accept the connection with initial data sent from the client.
   // Establish the local endpoint for the socket.
   IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
   IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
   IPEndPoint^ localEndPoint = gcnew IPEndPoint( ipAddress,11000 );
   
   // Create a TCP/IP socket.
   Socket^ listener = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   
   // Bind the socket to the local endpoint, and listen for incoming connections.
   listener->Bind( localEndPoint );
   listener->Listen( 100 );
   for ( ; ;  )
   {
      
      // Set the event to nonsignaled state.
      allDone->Reset();
      
      // Start an asynchronous socket to listen for connections and receive data from the client.
      Console::WriteLine( "Waiting for a connection..." );
      
      // Accept the connection and receive the first 10 bytes of data.
      int receivedDataSize = 10;
      listener->BeginAccept( receivedDataSize, gcnew AsyncCallback( AcceptReceiveCallback ), listener );
      
      // Wait until a connection is made and processed before continuing.
      allDone->WaitOne();

   }
}

static void AcceptReceiveCallback( IAsyncResult^ ar )
{
   // Get the socket that handles the client request.
   Socket^ listener = dynamic_cast<Socket^>(ar->AsyncState);

   // End the operation and display the received data on the console.
   array<Byte>^Buffer;
   int bytesTransferred;
   Socket^ handler = listener->EndAccept( Buffer, bytesTransferred, ar );
   String^ stringTransferred = Encoding::ASCII->GetString( Buffer, 0, bytesTransferred );
   Console::WriteLine( stringTransferred );
   Console::WriteLine( "Size of data transferred is {0}", bytesTransferred );

   // Create the state object for the asynchronous receive.
   StateObject^ state = gcnew StateObject;
   state->workSocket = handler;
   handler->BeginReceive( state->buffer, 0, StateObject::BufferSize, static_cast<SocketFlags>(0), gcnew AsyncCallback( ReadCallback ), state );
}


    // This server waits for a connection and then uses asynchronous operations to
    // accept the connection with initial data sent from the client.
         
    
    // Establish the local endpoint for the socket.

    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);
   
    // Create a TCP/IP socket.
    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );

    // Bind the socket to the local endpoint, and listen for incoming connections.
    listener.Bind(localEndPoint);
    listener.Listen(100);

    while (true) 
    {
        // Set the event to nonsignaled state.
        allDone.Reset();

        // Start an asynchronous socket to listen for connections and receive data from the client.
        Console.WriteLine("Waiting for a connection...");

        // Accept the connection and receive the first 10 bytes of data.
        int receivedDataSize = 10;
        listener.BeginAccept(receivedDataSize, new AsyncCallback(AcceptReceiveCallback), listener);
         
        // Wait until a connection is made and processed before continuing.
        allDone.WaitOne();
    }

}


public static void AcceptReceiveCallback(IAsyncResult ar) 
{
    // Get the socket that handles the client request.
    Socket listener = (Socket) ar.AsyncState;
    
    // End the operation and display the received data on the console.
    byte[] Buffer;
    int bytesTransferred;
    Socket handler = listener.EndAccept(out Buffer, out bytesTransferred, ar);
    string stringTransferred = Encoding.ASCII.GetString(Buffer, 0, bytesTransferred);

    Console.WriteLine(stringTransferred);
    Console.WriteLine("Size of data transferred is {0}", bytesTransferred);
          
    // Create the state object for the asynchronous receive.
    StateObject state = new StateObject();
    state.workSocket = handler;
    handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
    new AsyncCallback(ReadCallback), state);
}

注釈

接続指向プロトコルを使用できる、BeginAcceptメソッドを非同期的に受信接続を処理しようとします。Connection-oriented protocols can use the BeginAccept method to asynchronously process incoming connection attempts. 非同期接続の受け入れを使用すると、個別の実行スレッド内でデータを送受信できます。Accepting connections asynchronously enables you to send and receive data within a separate execution thread. このオーバー ロードでは、初期転送に同意するバイト数を指定できます。、receiveSizeパラメーター。This overload allows you to specify the number of bytes to accept in the initial transfer in the receiveSize parameter.

呼び出しの前に、BeginAcceptメソッドを呼び出す必要があります、Listenをリッスンし、キューの受信接続要求メソッド。Before calling the BeginAccept method, you must call the Listen method to listen for and queue incoming connection requests.

実装するコールバック メソッドを作成する必要があります、AsyncCallbackを委任し、その名前を渡す、BeginAcceptメソッド。You must create a callback method that implements the AsyncCallback delegate and pass its name to the BeginAccept method. 最低限、リスニングを渡す必要がありますSocketオブジェクトをBeginAcceptを通じて、stateパラメーター。To do this, at the very minimum, you must pass the listening Socket object to BeginAccept through the state parameter. 保持するために小さなクラスを作成するには、コールバックは、詳細を必要とする場合、Socketと、その他の必要な情報。If your callback needs more information, you can create a small class to hold the Socket and the other required information. このクラスのインスタンスを渡す、BeginAcceptメソッドによって、stateパラメーター。Pass an instance of this class to the BeginAccept method through the state parameter.

コールバック メソッドを呼び出す必要がある、EndAcceptメソッド。Your callback method should invoke the EndAccept method. アプリケーションを呼び出すとBeginAccept、システムは、通常は別のスレッドを使用して、指定されたコールバック メソッドを実行してでブロックEndAccept保留中の接続が取得されるまでです。When your application calls BeginAccept, the system usually uses a separate thread to execute the specified callback method and blocks on EndAccept until a pending connection is retrieved.

EndAccept 新しいを返しますSocketリモート ホストでのデータの送受信を行えます。EndAccept returns a new Socket that you can use to send and receive data with the remote host. 返されるこれを使用することはできませんSocket接続キューからその他の接続を受け入れるようにします。You cannot use this returned Socket to accept any additional connections from the connection queue. 元のスレッドを呼び出した後にブロックするかどうか、BeginAcceptメソッドを使用してWaitHandle.WaitOneします。If you want the original thread to block after you call the BeginAccept method, use WaitHandle.WaitOne. Set メソッドを呼び出し、ManualResetEvent元のスレッドの実行を続行する場合は、コールバック メソッドで。Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing.

システムは、呼び出し元のスレッドを使用して、コールバック メソッドを呼び出す可能性があります。The system may also use the calling thread to invoke the callback method. ここで、CompletedSynchronouslyプロパティを返されたIAsyncResultことを示すために設定されます、BeginAcceptメソッドは同期的に終了しました。In this case, the CompletedSynchronously property on the returned IAsyncResult will be set to indicate that the BeginAccept method completed synchronously.

コールバック メソッドの記述の詳細については、次を参照してください。コールバック メソッドとしてデリゲートのマーシャ リングします。For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

保留中の呼び出しをキャンセル、BeginAcceptメソッド、閉じる、Socketします。To cancel a pending call to the BeginAccept method, close the Socket. ときに、Closeメソッドを呼び出す非同期操作の進行中に、コールバックが提供されて、BeginAcceptメソッドが呼び出されます。When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginAccept method is called. 後続の呼び出し、EndAcceptメソッドがスローされます、ObjectDisposedExceptionを示す、操作がキャンセルされました。A subsequent call to the EndAccept method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

注意

使用して呼び出すことができます、 RemoteEndPoint 、返されたプロパティSocketリモート ホストのネットワーク アドレスとポート番号を識別するオブジェクト。You can call use the RemoteEndPoint property of the returned Socket object to identify the remote host's network address and port number.

注意

表示された場合、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.

こちらもご覧ください

BeginAccept(Socket, Int32, AsyncCallback, Object) BeginAccept(Socket, Int32, AsyncCallback, Object) BeginAccept(Socket, Int32, AsyncCallback, Object) BeginAccept(Socket, Int32, AsyncCallback, Object)

指定したソケットから受信接続の試行を受け入れる非同期操作を開始し、クライアント アプリケーションによって送信されるデータの最初のブロックを受信します。Begins an asynchronous operation to accept an incoming connection attempt from a specified socket and receives the first block of data sent by the client application.

public:
 IAsyncResult ^ BeginAccept(System::Net::Sockets::Socket ^ acceptSocket, int receiveSize, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginAccept (System.Net.Sockets.Socket acceptSocket, int receiveSize, AsyncCallback callback, object state);
member this.BeginAccept : System.Net.Sockets.Socket * int * AsyncCallback * obj -> IAsyncResult
Public Function BeginAccept (acceptSocket As Socket, receiveSize As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

パラメーター

acceptSocket
Socket Socket Socket Socket

受け入れた Socket オブジェクト。The accepted Socket object. この値は null の場合もあります。This value may be null.

receiveSize
Int32 Int32 Int32 Int32

受信する最大バイト数。The maximum number of bytes to receive.

state
Object Object Object Object

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

戻り値

非同期の Socket オブジェクトの作成を参照する IAsyncResult オブジェクト。An IAsyncResult object that references the asynchronous Socket object creation.

例外

Socket オブジェクトは閉じられています。The Socket object has been closed.

このメソッドには Windows NT が必要です。Windows NT is required for this method.

受け入れ元のソケットが、接続をリッスンしていません。The accepting socket is not listening for connections. BeginAccept(AsyncCallback, Object) の前に Bind(EndPoint) および Listen(Int32) を呼び出す必要があります。You must call Bind(EndPoint) and Listen(Int32) before calling BeginAccept(AsyncCallback, Object).

または-or- 受け入れられたソケットがバインドされています。The accepted socket is bound.

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

次のコード例は、ソケットを開き、非同期接続を受け入れます。The following code example opens a socket and accepts an asynchronous connection. この例では、ソケットは最初の 10 バイトのデータを受け入れます。、acceptSocketパラメーターがnull、どの強制的、BeginAccept受け入れられたソケットを作成する方法。In this example, the socket accepts the initial 10 bytes of data and the acceptSocket parameter is null, which forces the BeginAccept method to create the accepted socket. 受信したバイト数と、データは、コールバック デリゲートによって、コンソールに表示されます。The number of bytes received and the data are displayed on the console by the callback delegate. 参照してくださいBeginReceiveの残りのデータを受信する方法の説明。See BeginReceive for a description of how the remaining data is received.

   // This server waits for a connection and then uses asynchronous operations to
   // accept the connection with initial data sent from the client.
   // Establish the local endpoint for the socket.
   IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
   IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
   IPEndPoint^ localEndPoint = gcnew IPEndPoint( ipAddress,11000 );

   // Create a TCP/IP socket.
   Socket^ listener = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );

   // Bind the socket to the local endpoint, and listen for incoming connections.
   listener->Bind( localEndPoint );
   listener->Listen( 100 );
   for ( ; ;  )
   {
      // Set the event to nonsignaled state.
      allDone->Reset();

      // Start an asynchronous socket to listen for connections and receive data from the client.
      Console::WriteLine( "Waiting for a connection..." );

      // Accept the connection and receive the first 10 bytes of data. 
      // BeginAccept() creates the accepted socket.
      int receivedDataSize = 10;
      listener->BeginAccept( nullptr, receivedDataSize, gcnew AsyncCallback( AcceptReceiveDataCallback ), listener );

      // Wait until a connection is made and processed before continuing.
      allDone->WaitOne();
   }
}

static void AcceptReceiveDataCallback( IAsyncResult^ ar )
{
   // Get the socket that handles the client request.
   Socket^ listener = dynamic_cast<Socket^>(ar->AsyncState);
   
   // End the operation and display the received data on the console.
   array<Byte>^Buffer;
   int bytesTransferred;
   Socket^ handler = listener->EndAccept( Buffer, bytesTransferred, ar );
   String^ stringTransferred = Encoding::ASCII->GetString( Buffer, 0, bytesTransferred );
   Console::WriteLine( stringTransferred );
   Console::WriteLine( "Size of data transferred is {0}", bytesTransferred );
   
   // Create the state object for the asynchronous receive.
   StateObject^ state = gcnew StateObject;
   state->workSocket = handler;
   handler->BeginReceive( state->buffer, 0, StateObject::BufferSize, static_cast<SocketFlags>(0), gcnew AsyncCallback( ReadCallback ), state );
}

    // This server waits for a connection and then uses asynchronous operations to
    // accept the connection with initial data sent from the client.
               
    // Establish the local endpoint for the socket.

    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

    // Create a TCP/IP socket.
    Socket listener = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream, ProtocolType.Tcp );

    // Bind the socket to the local endpoint, and listen for incoming connections.
    listener.Bind(localEndPoint);
    listener.Listen(100);

    while (true) 
    {
        // Set the event to nonsignaled state.
        allDone.Reset();

        // Start an asynchronous socket to listen for connections and receive data from the client.
        Console.WriteLine("Waiting for a connection...");

        // Accept the connection and receive the first 10 bytes of data. 
        // BeginAccept() creates the accepted socket.
        int receivedDataSize = 10;
        listener.BeginAccept(null, receivedDataSize, new AsyncCallback(AcceptReceiveDataCallback), listener);

        // Wait until a connection is made and processed before continuing.
        allDone.WaitOne();
    }
}



public static void AcceptReceiveDataCallback(IAsyncResult ar) 
{
    // Get the socket that handles the client request.
    Socket listener = (Socket) ar.AsyncState;
    
    // End the operation and display the received data on the console.
    byte[] Buffer;
    int bytesTransferred;
    Socket handler = listener.EndAccept(out Buffer, out bytesTransferred, ar);
    string stringTransferred = Encoding.ASCII.GetString(Buffer, 0, bytesTransferred);

    Console.WriteLine(stringTransferred);
    Console.WriteLine("Size of data transferred is {0}", bytesTransferred);

    // Create the state object for the asynchronous receive.
    StateObject state = new StateObject();
    state.workSocket = handler;
    handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,
    new AsyncCallback(ReadCallback), state);
}

注釈

接続指向プロトコルを使用できる、BeginAcceptメソッドを非同期的に受信接続を処理しようとします。Connection-oriented protocols can use the BeginAccept method to asynchronously process incoming connection attempts. 非同期的に接続を受け入れると、個別の実行スレッド内でデータを送受信する機能を提供します。Accepting connections asynchronously gives you the ability to send and receive data within a separate execution thread. このオーバー ロードで受け入れられたソケットを指定できます。、acceptSocketパラメーター。This overload allows you to specify the accepted socket in the acceptSocket parameter. このパラメーターが場合null、によって受け入れられたソケットが作成された、BeginAcceptメソッド。If this parameter is null, the accepted socket is created by the BeginAccept method. 初期転送に同意するバイト数を指定することができます、receiveSizeパラメーター。You can specify the number of bytes to accept in the initial transfer in the receiveSize parameter.

呼び出しの前に、BeginAcceptメソッドを呼び出す必要があります、Listenをリッスンし、キューの受信接続要求メソッド。Before calling the BeginAccept method, you must call the Listen method to listen for and queue incoming connection requests.

実装するコールバック メソッドを作成する必要があります、AsyncCallbackを委任し、その名前を渡す、BeginAcceptメソッド。You must create a callback method that implements the AsyncCallback delegate and pass its name to the BeginAccept method. 最低限、リスニングを渡す必要がありますSocketオブジェクトをBeginAcceptを通じて、stateパラメーター。To do this, at the very minimum, you must pass the listening Socket object to BeginAccept through the state parameter. 保持するために小さなクラスを作成するには、コールバックは、詳細を必要とする場合、Socketと、その他の必要な情報。If your callback needs more information, you can create a small class to hold the Socket and the other required information. このクラスのインスタンスを渡す、BeginAcceptメソッドによって、stateパラメーター。Pass an instance of this class to the BeginAccept method through the state parameter.

コールバック メソッドを呼び出す必要がある、EndAcceptメソッド。Your callback method should invoke the EndAccept method. アプリケーションを呼び出すとBeginAccept、システムは、通常は別のスレッドを使用して、指定されたコールバック メソッドを実行してでブロックEndAccept保留中の接続が取得されるまでです。When your application calls BeginAccept, the system usually uses a separate thread to execute the specified callback method and blocks on EndAccept until a pending connection is retrieved.

EndAccept 新しいを返しますSocketリモート ホストでのデータの送受信に使用できるオブジェクトします。EndAccept returns a new Socket object that you can use to send and receive data with the remote host. 返されるこれを使用することはできませんSocket接続キューからその他の接続を受け入れるようにします。You cannot use this returned Socket to accept any additional connections from the connection queue. 元のスレッドを呼び出した後にブロックするかどうか、BeginAcceptメソッドを使用してWaitHandle.WaitOneします。If you want the original thread to block after you call the BeginAccept method, use WaitHandle.WaitOne. Set メソッドを呼び出し、ManualResetEvent元のスレッドの実行を続行する場合は、コールバック メソッドで。Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing.

システムは、呼び出し元のスレッドを使用して、コールバック メソッドを呼び出す可能性があります。The system may also use the calling thread to invoke the callback method. ここで、CompletedSynchronouslyプロパティを返されたIAsyncResultことを示すために設定されます、BeginAcceptメソッドは同期的に終了しました。In this case, the CompletedSynchronously property on the returned IAsyncResult will be set to indicate that the BeginAccept method completed synchronously.

コールバック メソッドの記述に関する詳細については、次を参照してください。コールバック メソッドとしてデリゲートのマーシャ リングします。For additional information on writing callback methods, see Marshaling a Delegate as a Callback Method.

保留中の呼び出しをキャンセル、BeginAcceptメソッド、閉じる、Socketします。To cancel a pending call to the BeginAccept method, close the Socket. ときに、Closeメソッドを呼び出す非同期操作の進行中に、コールバックが提供されて、BeginAcceptメソッドが呼び出されます。When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginAccept method is called. 後続の呼び出し、EndAcceptメソッドがスローされます、ObjectDisposedExceptionを示す、操作がキャンセルされました。A subsequent call to the EndAccept method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

注意

使用することができます、 RemoteEndPoint 、返されたプロパティSocketリモート ホストのネットワーク アドレスとポート番号を識別するオブジェクト。You can use the RemoteEndPoint property of the returned Socket object to identify the remote host's network address and port number.

注意

表示された場合、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.

こちらもご覧ください

適用対象