Socket.BeginAcceptとは? わかりやすく解説

Socket.BeginAccept メソッド (AsyncCallback, Object)

受信接続の試行を受け入れる非同期操作を開始します。

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function BeginAccept ( _
    callback As AsyncCallback, _
    state As Object _
) As IAsyncResult
Dim instance As Socket
Dim callback As AsyncCallback
Dim state As Object
Dim returnValue As IAsyncResult

returnValue = instance.BeginAccept(callback, state)
public IAsyncResult BeginAccept (
    AsyncCallback callback,
    Object state
)
public:
IAsyncResult^ BeginAccept (
    AsyncCallback^ callback, 
    Object^ state
)
public IAsyncResult BeginAccept (
    AsyncCallback callback, 
    Object state
)
public function BeginAccept (
    callback : AsyncCallback, 
    state : Object
) : IAsyncResult

パラメータ

callback

AsyncCallback デリゲート。

state

この要求のステータス情報を格納するオブジェクト。

戻り値
非同期の Socket 作成を参照する IAsyncResult。

例外例外
例外の種類条件

ObjectDisposedException

Socket オブジェクトは閉じられています。

NotSupportedException

このメソッドには Windows NT が必要です。

InvalidOperationException

受け入れ元のソケットが、接続を待機していません。BeginAccept の前に Bind および Listen を呼び出す必要があります。

または

受け入れられたソケットがバインドされています。

ArgumentOutOfRangeException

receiveSize が 0 未満です。

SocketException

ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。

解説解説

コネクション指向のプロトコルは、BeginAccept メソッドを使用して受信接続の試行を非同期的に処理できます。接続を非同期的に受け入れると、個別の実行スレッド内でデータを送受信できます。BeginAccept メソッドを呼び出す前に、Listen メソッドを呼び出して、受信接続要求を待機してキューに置いておく必要があります。

AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginAccept メソッドに渡す必要があります。この操作を行うには、少なくとも、state パラメータを使用して、待機中の Socket オブジェクトを BeginAccept に渡さなければなりません。またコールバックに他の情報が必要な場合は、小さなクラスを作成して Socket および必要な情報を保持させることができます。このクラスのインスタンスは、state パラメータを使用して BeginAccept メソッドに渡します。

コールバック メソッドは EndAccept メソッドを呼び出す必要があります。アプリケーションが BeginAccept を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、EndAccept は、保留中の接続が取得されるまでブロックします。EndAccept は、リモート ホストとのデータの送受信に使用できる、新しい Socket オブジェクトを返します。この返された Socket を使用して、他の接続を接続キューから受け取ることはできません。BeginAccept メソッドを呼び出してから元のスレッドをブロックする場合は、WaitHandle.WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドの ManualResetEvent で Set メソッドを呼び出します。コールバック メソッドの記述に関する追加情報については、「Callback のサンプル」を参照してください。

メモメモ

返された Socket の RemoteEndPoint メソッドを呼び出すと、リモート ホストのネットワーク アドレスとポート番号を確認できます。

使用例使用例

受信接続を非同期的に受信する試みを次のコード例に示します。

   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
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());
   }
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.get_AddressList()[0], 11000);

Socket s = new Socket(lep.get_Address().get_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 (System.Exception e) {
    Console.WriteLine(e.ToString());
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.BeginAccept メソッド (Socket, Int32, AsyncCallback, Object)

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

指定したソケットから受信接続の試行を受け入れる非同期操作を開始し、クライアント アプリケーションによって送信されるデータの最初のブロックを受信します。

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function BeginAccept ( _
    acceptSocket As Socket, _
    receiveSize As Integer, _
    callback As AsyncCallback, _
    state As Object _
) As IAsyncResult
Dim instance As Socket
Dim acceptSocket As Socket
Dim receiveSize As Integer
Dim callback As AsyncCallback
Dim state As Object
Dim returnValue As IAsyncResult

returnValue = instance.BeginAccept(acceptSocket, receiveSize, callback, state)
public IAsyncResult BeginAccept (
    Socket acceptSocket,
    int receiveSize,
    AsyncCallback callback,
    Object state
)
public:
IAsyncResult^ BeginAccept (
    Socket^ acceptSocket, 
    int receiveSize, 
    AsyncCallback^ callback, 
    Object^ state
)
public IAsyncResult BeginAccept (
    Socket acceptSocket, 
    int receiveSize, 
    AsyncCallback callback, 
    Object state
)
public function BeginAccept (
    acceptSocket : Socket, 
    receiveSize : int, 
    callback : AsyncCallback, 
    state : Object
) : IAsyncResult

パラメータ

acceptSocket

受け入れた Socket オブジェクト。この値は、null 参照 (Visual Basic では Nothing) の場合もあります。

receiveSize

受信する最大バイト数。

callback

AsyncCallback デリゲート。

state

この要求のステータス情報を格納するオブジェクト。

戻り値
非同期の Socket オブジェクトの作成を参照する IAsyncResult オブジェクト。

例外例外
例外の種類条件

ObjectDisposedException

Socket オブジェクトは閉じられています。

NotSupportedException

このメソッドには Windows NT が必要です。

InvalidOperationException

受け入れ元のソケットが、接続を待機していません。BeginAccept の前に Bind および Listen を呼び出す必要があります。

または

受け入れられたソケットがバインドされています。

ArgumentOutOfRangeException

receiveSize が 0 未満です。

SocketException

ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。

解説解説

コネクション指向のプロトコルは、BeginAccept メソッドを使用して受信接続の試行を非同期的に処理できます。接続を非同期的に受け入れると、個別の実行スレッド内でデータを送受信できます。このオーバーロードによって、受け入れられるソケットを acceptSocket パラメータで指定できます。このパラメータが null 参照 (Visual Basic では Nothing) の場合、受け入れられたソケットは BeginAccept メソッドで作成されます。初期転送で受け入れるバイト数を receiveSize パラメータで指定できます。

BeginAccept メソッドを呼び出す前に、Listen メソッドを呼び出して、受信接続要求を待機してキューに置いておく必要があります。

AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginAccept メソッドに渡す必要があります。この操作を行うには、少なくとも、state パラメータを使用して、待機中の Socket オブジェクトを BeginAccept に渡さなければなりません。またコールバックに他の情報が必要な場合は、小さなクラスを作成して Socket および必要な情報を保持させることができます。このクラスのインスタンスは、state パラメータを使用して BeginAccept メソッドに渡します。

コールバック メソッドは EndAccept メソッドを呼び出す必要があります。アプリケーションが BeginAccept を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、EndAccept は、保留中の接続が取得されるまでブロックします。

EndAccept は、リモート ホストとのデータの送受信に使用できる、新しい Socket オブジェクトを返します。この返された Socket を使用して、他の接続を接続キューから受け取ることはできません。BeginAccept メソッドを呼び出してから元のスレッドをブロックする場合は、WaitHandle.WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドの ManualResetEvent で Set メソッドを呼び出します。コールバック メソッドの記述に関する追加情報については、「Callback のサンプル」を参照してください。

メモメモ

返された Socket オブジェクトの RemoteEndPoint メソッドを呼び出すと、リモート ホストのネットワーク アドレスとポート番号を確認できます。

使用例使用例

ソケットを開いて非同期接続を受け入れるコード例を次に示します。この例では、ソケットはデータの最初の 10 バイトを受け入れ、acceptSocket パラメータは null 参照 (Visual Basic では Nothing) です。このパラメータによって、BeginAccept メソッドは受け入れられたソケットを強制的に作成します。コールバック デリゲートによって、受信バイト数とデータがコンソールに表示されます。残りのデータを受信する方法については、BeginReceive のトピックを参照してください。

    // 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.Resolve(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);
}

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.BeginAccept メソッド (Int32, AsyncCallback, Object)

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

受信接続の試行を受け入れる非同期操作を開始し、クライアント アプリケーションによって送信されるデータの最初のブロックを受信します。

名前空間: System.Net.Sockets
アセンブリ: System (system.dll 内)
構文構文

Public Function BeginAccept ( _
    receiveSize As Integer, _
    callback As AsyncCallback, _
    state As Object _
) As IAsyncResult
Dim instance As Socket
Dim receiveSize As Integer
Dim callback As AsyncCallback
Dim state As Object
Dim returnValue As IAsyncResult

returnValue = instance.BeginAccept(receiveSize, callback, state)
public IAsyncResult BeginAccept (
    int receiveSize,
    AsyncCallback callback,
    Object state
)
public:
IAsyncResult^ BeginAccept (
    int receiveSize, 
    AsyncCallback^ callback, 
    Object^ state
)
public IAsyncResult BeginAccept (
    int receiveSize, 
    AsyncCallback callback, 
    Object state
)
public function BeginAccept (
    receiveSize : int, 
    callback : AsyncCallback, 
    state : Object
) : IAsyncResult

パラメータ

receiveSize

送信元から受け入れるバイト数。

callback

AsyncCallback デリゲート。

state

この要求のステータス情報を格納するオブジェクト。

戻り値
非同期の Socket 作成を参照する IAsyncResult。

例外例外
例外の種類条件

ObjectDisposedException

Socket オブジェクトは閉じられています。

NotSupportedException

このメソッドには Windows NT が必要です。

InvalidOperationException

受け入れ元のソケットが、接続を待機していません。BeginAccept の前に Bind および Listen を呼び出す必要があります。

または

受け入れられたソケットがバインドされています。

ArgumentOutOfRangeException

receiveSize が 0 未満です。

SocketException

ソケットへのアクセスを試みているときにエラーが発生しました。詳細については「解説」を参照してください。

解説解説

コネクション指向のプロトコルは、BeginAccept メソッドを使用して受信接続の試行を非同期的に処理できます。接続を非同期的に受け入れると、個別の実行スレッド内でデータを送受信できます。このオーバーロードによって、初期転送で受け入れるバイト数を receiveSize パラメータで指定できます。

BeginAccept メソッドを呼び出す前に、Listen メソッドを呼び出して、受信接続要求を待機してキューに置いておく必要があります。

AsyncCallback デリゲートを実装するコールバック メソッドを作成し、その名前を BeginAccept メソッドに渡す必要があります。この操作を行うには、少なくとも、state パラメータを使用して、待機中の Socket オブジェクトを BeginAccept に渡さなければなりません。またコールバックに他の情報が必要な場合は、小さなクラスを作成して Socket および必要な情報を保持させることができます。このクラスのインスタンスは、state パラメータを使用して BeginAccept メソッドに渡します。

コールバック メソッドは EndAccept メソッドを呼び出す必要があります。アプリケーションが BeginAccept を呼び出すと、指定したコールバック メソッドが個別のスレッドを使用して実行され、EndAccept は、保留中の接続が取得されるまでブロックします。

EndAccept は、リモート ホストとのデータの送受信に使用できる、新しい Socket を返します。この返された Socket を使用して、他の接続を接続キューから受け取ることはできません。BeginAccept メソッドを呼び出してから元のスレッドをブロックする場合は、WaitHandle.WaitOne を使用します。元のスレッドの実行を継続させるには、コールバック メソッドの ManualResetEvent で Set メソッドを呼び出します。コールバック メソッドの記述に関する追加情報については、「Callback のサンプル」を参照してください。

メモメモ

返された Socket オブジェクトの RemoteEndPoint メソッドを呼び出すと、リモート ホストのネットワーク アドレスとポート番号を確認できます。

使用例使用例

ソケットを開いて非同期接続を受け入れるコード例を次に示します。この例では、ソケットはデータの最初の 10 バイトを受け入れます。コールバック デリゲートによって、受信バイト数とデータがコンソールに表示されます。残りのデータを受信する方法については、BeginReceive のトピックを参照してください。

    // 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.Resolve(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);
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Socket.BeginAccept メソッド




英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「Socket.BeginAccept」の関連用語

Socket.BeginAcceptのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Socket.BeginAcceptのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS