次の方法で共有


Socket.EndAccept メソッド

受信接続の試行を非同期的に受け入れ、新しい Socket を作成してリモート ホスト通信を処理します。

Public Function EndAccept( _
   ByVal asyncResult As IAsyncResult _) As Socket
[C#]
public Socket EndAccept(IAsyncResultasyncResult);
[C++]
public: Socket* EndAccept(IAsyncResult* asyncResult);
[JScript]
public function EndAccept(
   asyncResult : IAsyncResult) : Socket;

パラメータ

  • asyncResult
    この非同期操作のステータス情報だけではなく、任意のユーザー定義のデータも格納する IAsyncResult

戻り値

リモート ホストとの通信を処理する Socket

例外

例外の種類 条件
ArgumentNullException asyncResult が null 参照 (Visual Basic では Nothing) です。
ArgumentException BeginAccept への呼び出しで asyncResult が作成されませんでした。
SocketException ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。
ObjectDisposedException Socket は閉じられています。

解説

EndAcceptBeginAccept の呼び出しを完了します。 BeginAccept を呼び出す前に、 AsyncCallback デリゲートを実装するコールバック メソッドを作成する必要があります。このコールバック メソッドは個別のスレッドで実行され、 BeginAccept メソッドが返された後で呼び出されます。このコールバック メソッドは、 BeginAccept メソッドから返された asyncResult パラメータを受け取る必要があります。

コールバック メソッド内では、 asyncResult パラメータの AsyncState メソッドを呼び出して、接続が試行された Socket を取得します。 Socket を取得したら、 EndAccept メソッドを呼び出して接続の試行を正常に完了できます。 EndAccept メソッドは、受信接続キューで接続が保留中の間はブロックします。 EndAccept メソッドは受信接続を受け入れ、リモート ホストとのデータの送受信で使用できる新しい Socket を返します。

メモ    SocketException が発生した場合は、 SocketException.ErrorCode を使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのマニュアルから、エラーの詳細情報を確認できます。これは MSDN から入手できます。

使用例

[Visual Basic, C#, C++] 非同期要求を終了し、受信接続要求を受け入れる新しい Socket を作成する例を次に示します。

 
allDone.Set()
Dim s As Socket = CType(ar.AsyncState, Socket)
Dim s2 As Socket = s.EndAccept(ar)
Dim so2 As New StateObject()
so2.workSocket = s2
s2.BeginReceive(so2.buffer, 0, StateObject.BUFFER_SIZE, 0, New AsyncCallback(AddressOf Async_Send_Receive.Read_Callback), so2)
   End Sub 'Listen_Callback
   

[C#] 
allDone.Set();
Socket s = (Socket) ar.AsyncState;
Socket s2 = s.EndAccept(ar);
StateObject so2 = new StateObject();
so2.workSocket = s2;
s2.BeginReceive(so2.buffer, 0, StateObject.BUFFER_SIZE,0,
                      new AsyncCallback(Async_Send_Receive.Read_Callback), so2);    

[C++] 
allDone->Set();
Socket* s = __try_cast<Socket*>(ar->AsyncState);
Socket* s2 = s->EndAccept(ar);
StateObject* so2 = new StateObject();
so2->workSocket = s2;
s2->BeginReceive(so2->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None,
    new AsyncCallback(0, &Async_Send_Receive::Read_Callback), so2);    

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Socket クラス | Socket メンバ | System.Net.Sockets 名前空間 | 非同期呼び出しの組み込み | BeginAccept | AsyncCallback | AsyncState