Socket.EndDisconnect(IAsyncResult) Socket.EndDisconnect(IAsyncResult) Socket.EndDisconnect(IAsyncResult) Socket.EndDisconnect(IAsyncResult) Method

定義

保留中の非同期切断要求を終了します。Ends a pending asynchronous disconnect request.

public:
 void EndDisconnect(IAsyncResult ^ asyncResult);
public void EndDisconnect (IAsyncResult asyncResult);
member this.EndDisconnect : IAsyncResult -> unit
Public Sub EndDisconnect (asyncResult As IAsyncResult)

パラメーター

asyncResult
IAsyncResult IAsyncResult IAsyncResult IAsyncResult

この非同期操作のステータス情報およびユーザー定義データを格納する IAsyncResult オブジェクト。An IAsyncResult object that stores state information and any user-defined data for this asynchronous operation.

例外

Windows 2000 以前のオペレーティング システムです。このメソッドを使用するには、Windows XP が必要です。The operating system is Windows 2000 or earlier, and this method requires Windows XP.

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

BeginDisconnect(Boolean, AsyncCallback, Object) メソッドへの呼び出しで asyncResult が返されませんでした。asyncResult was not returned by a call to the BeginDisconnect(Boolean, AsyncCallback, Object) method.

EndDisconnect(IAsyncResult) は、非同期接続のために以前に呼び出されています。EndDisconnect(IAsyncResult) was previously called for the asynchronous connection.

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

切断要求がタイムアウトしました。The disconnect request has timed out.

次のコード例では、非同期通信用ソケットを作成し、リモート ホストにデータを送信します。The following code example creates a socket for asynchronous communication and sends some data to a remote host. データが送信されると、Shutdownを送信を停止し、receive アクティビティが呼び出されます。When the data has been sent, Shutdown is called to stop the send and receive activity. BeginDisconnect切断要求を開始すると呼びます。Then BeginDisconnect is called to begin a disconnect request. コールバック デリゲート呼び出しEndDisconnect非同期要求を終了します。The callback delegate calls EndDisconnect to end the asynchronous request. 要求が完了したら、Connectedプロパティは、ソケットが切断されているかどうかをテストするクエリを実行します。When the request completes, the Connected property is queried to test whether the socket is disconnected.

      // Establish the remote endpoint for the socket.
      // For this example use local computer.
      IPHostEntry^ ipHostInfo = Dns::GetHostEntry( Dns::GetHostName() );
      IPAddress^ ipAddress = ipHostInfo->AddressList[ 0 ];
      IPEndPoint^ remoteEP = gcnew IPEndPoint( ipAddress,11000 );

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

      // Connect to the remote endpoint.
      client->BeginConnect( remoteEP, gcnew AsyncCallback( ConnectCallback ), client );

      // Wait for connect.
      connectDone->WaitOne();

      // Send some data to the remote device.
      String^ data = "This is a string of data <EOF>";
      array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
      client->BeginSend( buffer, 0, buffer->Length, static_cast<SocketFlags>(0), gcnew AsyncCallback( ClientSendCallback ), client );

      // Wait for send done.
      sendDone->WaitOne();

      // Release the socket.
      client->Shutdown( SocketShutdown::Both );
      client->BeginDisconnect( true, gcnew AsyncCallback( DisconnectCallback ), client );

      // Wait for the disconnect to complete.
      disconnectDone->WaitOne();
      if ( client->Connected )
            Console::WriteLine( "We're still connected" );
      else
            Console::WriteLine( "We're disconnected" );
   }

private:
   static void DisconnectCallback( IAsyncResult^ ar )
   {
      // Complete the disconnect request.
      Socket^ client = dynamic_cast<Socket^>(ar->AsyncState);
      client->EndDisconnect( ar );

      // Signal that the disconnect is complete.
      disconnectDone->Set();
   }

public:

    // Establish the remote endpoint for the socket.
    // For this example use local computer.
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
    IPAddress ipAddress = ipHostInfo.AddressList[0];
    IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000);

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

    // Connect to the remote endpoint.
    client.BeginConnect(remoteEP, 
        new AsyncCallback(ConnectCallback), client);
        
    // Wait for connect.
    connectDone.WaitOne();

    // Send some data to the remote device.
    string data = "This is a string of data <EOF>";
    byte[] buffer = Encoding.ASCII.GetBytes(data);
    client.BeginSend(buffer, 0, buffer.Length, 0, new AsyncCallback(ClientSendCallback), client);
    // Wait for send done.
    sendDone.WaitOne();

    // Release the socket.
    client.Shutdown(SocketShutdown.Both);
    client.BeginDisconnect(true, new AsyncCallback(DisconnectCallback), client);

    // Wait for the disconnect to complete.
    disconnectDone.WaitOne();
    if (client.Connected)
        Console.WriteLine("We're still connected");
    else
        Console.WriteLine("We're disconnected");
}


private static void DisconnectCallback(IAsyncResult ar)
{ 
    // Complete the disconnect request.
    Socket client = (Socket) ar.AsyncState;
    client.EndDisconnect(ar);

    // Signal that the disconnect is complete.
    disconnectDone.Set();
}

注釈

EndDisconnect 呼び出しが完了するとBeginDisconnectします。EndDisconnect completes a call to BeginDisconnect. EndDisconnectメソッドは、切断が完了するまでブロックします。The EndDisconnect method blocks until the disconnect completes. 非同期操作については、MSDN ライブラリの非同期プログラミングの概要トピックを参照してください。For information about asynchronous operations, see the Asynchronous Programming Overview topic in the MSDN library.

注意

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

適用対象