Socket.EndAccept Method

Definition

Асинхронно принимает попытку входящего подключения.Asynchronously accepts an incoming connection attempt.

Overloads

EndAccept(Byte[], Int32, IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.Asynchronously accepts an incoming connection attempt and creates a new Socket object to handle remote host communication. Этот метод возвращает буфер, который содержит начальные данные и число переданных байтов.This method returns a buffer that contains the initial data and the number of bytes transferred.

EndAccept(Byte[], IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.Asynchronously accepts an incoming connection attempt and creates a new Socket object to handle remote host communication. Этот метод возвращает буфер, который содержит начальные данные для передачи.This method returns a buffer that contains the initial data transferred.

EndAccept(IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.Asynchronously accepts an incoming connection attempt and creates a new Socket to handle remote host communication.

EndAccept(Byte[], Int32, IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.Asynchronously accepts an incoming connection attempt and creates a new Socket object to handle remote host communication. Этот метод возвращает буфер, который содержит начальные данные и число переданных байтов.This method returns a buffer that contains the initial data and the number of bytes transferred.

public:
 System::Net::Sockets::Socket ^ EndAccept([Runtime::InteropServices::Out] cli::array <System::Byte> ^ % buffer, [Runtime::InteropServices::Out] int % bytesTransferred, IAsyncResult ^ asyncResult);
public System.Net.Sockets.Socket EndAccept (out byte[] buffer, out int bytesTransferred, IAsyncResult asyncResult);
member this.EndAccept : Byte[] * int * IAsyncResult -> System.Net.Sockets.Socket
Public Function EndAccept (ByRef buffer As Byte(), ByRef bytesTransferred As Integer, asyncResult As IAsyncResult) As Socket

Parameters

buffer
Byte[]

Массив типа Byte, который содержит переданные байты.An array of type Byte that contains the bytes transferred.

bytesTransferred
Int32

Число переданных байтов.The number of bytes transferred.

asyncResult
IAsyncResult

Объект IAsyncResult, в котором хранятся сведения о состоянии для этой асинхронной операции, а также любые данные, определенные пользователем.An IAsyncResult object that stores state information for this asynchronous operation as well as any user defined data.

Returns

Socket

Объект Socket для связи с удаленным узлом.A Socket object to handle communication with the remote host.

Exceptions

Этот метод доступен только в Windows NT.Windows NT is required for this method.

Объект Socket закрыт.The Socket object has been closed.

Параметр asyncResult пуст.asyncResult is empty.

Параметр asyncResult не был создан вызовом метода BeginAccept(AsyncCallback, Object).asyncResult was not created by a call to BeginAccept(AsyncCallback, Object).

Ранее был вызван метод EndAccept(IAsyncResult).EndAccept(IAsyncResult) method was previously called.

Произошла ошибка при попытке доступа к объекту Socket.An error occurred when attempting to access the Socket.

Examples

В следующем примере кода используется BeginAccept, чтобы создать и подключить сокет и принять начальные 10 байт данных.The following code example uses BeginAccept to create and connect a socket and accept the initial 10 bytes of data. Делегат обратного вызова вызывает EndAccept для завершения асинхронного запроса.The callback delegate calls EndAccept to end the asynchronous request. Число переданных байтов и данные возвращаются в buffer и bytesTransferred параметров этого метода и отображаются в консоли.The number of bytes transmitted and the data are returned in the buffer and bytesTransferred parameters of this method and are displayed on the console.

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

Remarks

EndAccept завершает вызов BeginAccept.EndAccept completes a call to BeginAccept. Перед вызовом BeginAcceptнеобходимо создать метод обратного вызова, который вызывается делегатом AsyncCallback.Before calling BeginAccept, you need to create a callback method that is invoked by the AsyncCallback delegate. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после того, как метод BeginAccept возвращает.This callback method executes in a separate thread, and is called by the system after the BeginAccept method returns. Он должен принять параметр asyncResult, возвращенный методом BeginAccept.It must accept the asyncResult parameter returned from the BeginAccept method.

В методе обратного вызова вызовите метод AsyncState параметра asyncResult, чтобы получить Socket, на который устанавливается попытка подключения.Within the callback method, call the AsyncState method of the asyncResult parameter to obtain the Socket on which the connection attempt is being made. После получения Socketможно вызвать метод EndAccept для успешного завершения попытки подключения.After obtaining the Socket, you can call the EndAccept method to successfully complete the connection attempt. Параметр buffer этой перегрузки содержит данные, полученные при вызове функции BeginAccept, а параметр bytesTransferred содержит число байтов, переданных в вызове.The buffer parameter of this overload contains the data that was received in the call to BeginAccept and the bytesTransferred parameter contains the number of bytes that were transferred in the call.

Метод EndAccept блокируется до тех пор, пока не будет ожидание подключения в очереди входящих подключений.The EndAccept method blocks until a connection is pending in the incoming connection queue. Метод EndAccept принимает входящее подключение и возвращает новый Socket, который можно использовать для отправки и получения данных с удаленного узла.The EndAccept method accepts the incoming connection and returns a new Socket that can be used to send data to and receive data from the remote host.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.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.

EndAccept(Byte[], IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.Asynchronously accepts an incoming connection attempt and creates a new Socket object to handle remote host communication. Этот метод возвращает буфер, который содержит начальные данные для передачи.This method returns a buffer that contains the initial data transferred.

public:
 System::Net::Sockets::Socket ^ EndAccept([Runtime::InteropServices::Out] cli::array <System::Byte> ^ % buffer, IAsyncResult ^ asyncResult);
public System.Net.Sockets.Socket EndAccept (out byte[] buffer, IAsyncResult asyncResult);
member this.EndAccept : Byte[] * IAsyncResult -> System.Net.Sockets.Socket
Public Function EndAccept (ByRef buffer As Byte(), asyncResult As IAsyncResult) As Socket

Parameters

buffer
Byte[]

Массив типа Byte, который содержит переданные байты.An array of type Byte that contains the bytes transferred.

asyncResult
IAsyncResult

Объект IAsyncResult, в котором хранятся сведения о состоянии для этой асинхронной операции, а также любые данные, определенные пользователем.An IAsyncResult object that stores state information for this asynchronous operation as well as any user defined data.

Returns

Socket

Объект Socket для связи с удаленным узлом.A Socket object to handle communication with the remote host.

Exceptions

Этот метод доступен только в Windows NT.Windows NT is required for this method.

Объект Socket закрыт.The Socket object has been closed.

Параметр asyncResult пуст.asyncResult is empty.

Параметр asyncResult не был создан вызовом метода BeginAccept(AsyncCallback, Object).asyncResult was not created by a call to BeginAccept(AsyncCallback, Object).

Ранее был вызван метод EndAccept(IAsyncResult).EndAccept(IAsyncResult) method was previously called.

Произошла ошибка при попытке доступа к объекту Socket.An error occurred when attempting to access the Socket

Examples

В следующем примере кода используется BeginAccept, чтобы создать и подключить сокет и принять начальные 10 байт данных.The following code example uses BeginAccept to create and connect a socket and accept the initial 10 bytes of data. Делегат обратного вызова вызывает EndAccept для завершения асинхронного запроса.The callback delegate calls EndAccept to end the asynchronous request. Число переданных байтов и данные возвращаются в buffer и bytesTransferred параметров этого метода и отображаются в консоли.The number of bytes transmitted and the data are returned in the buffer and bytesTransferred parameters of this method and are displayed on the console.

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

Remarks

EndAccept завершает вызов BeginAccept.EndAccept completes a call to BeginAccept. Перед вызовом BeginAcceptнеобходимо создать метод обратного вызова, который вызывается делегатом AsyncCallback.Before calling BeginAccept, you need to create a callback method that is invoked by the AsyncCallback delegate. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после того, как метод BeginAccept возвращает.This callback method executes in a separate thread, and is called by the system after the BeginAccept method returns.

В методе обратного вызова вызовите метод AsyncState параметра asyncResult, чтобы получить Socket, на который устанавливается попытка подключения.Within the callback method, call the AsyncState method of the asyncResult parameter to obtain the Socket on which the connection attempt is being made. После получения Socketможно вызвать метод EndAccept для успешного завершения попытки подключения.After obtaining the Socket, you can call the EndAccept method to successfully complete the connection attempt. Параметр buffer этой перегрузки содержит данные, полученные при вызове функции BeginAccept, а параметр bytesTransferred содержит число байтов, переданных в вызове.The buffer parameter of this overload contains the data that was received in the call to BeginAccept and the bytesTransferred parameter contains the number of bytes that were transferred in the call.

Метод EndAccept блокируется до тех пор, пока не будет ожидание подключения в очереди входящих подключений.The EndAccept method blocks until a connection is pending in the incoming connection queue. Метод EndAccept принимает входящее подключение и возвращает новый Socket, который можно использовать для отправки и получения данных с удаленного узла.The EndAccept method accepts the incoming connection and returns a new Socket that can be used to send data to and receive data from the remote host.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.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.

EndAccept(IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.Asynchronously accepts an incoming connection attempt and creates a new Socket to handle remote host communication.

public:
 System::Net::Sockets::Socket ^ EndAccept(IAsyncResult ^ asyncResult);
public:
 System::Net::Sockets::Socket ^ EndAccept(IAsyncResult ^ result);
public System.Net.Sockets.Socket EndAccept (IAsyncResult asyncResult);
public System.Net.Sockets.Socket EndAccept (IAsyncResult result);
member this.EndAccept : IAsyncResult -> System.Net.Sockets.Socket
member this.EndAccept : IAsyncResult -> System.Net.Sockets.Socket
Public Function EndAccept (asyncResult As IAsyncResult) As Socket
Public Function EndAccept (result As IAsyncResult) As Socket

Parameters

asyncResultresult
IAsyncResult

Объект IAsyncResult, в котором хранятся сведения о состоянии для этой асинхронной операции, а также любые данные, определенные пользователем.An IAsyncResult that stores state information for this asynchronous operation as well as any user defined data.

Returns

Socket

ОбъектSocket для связи с удаленным узлом.A Socket to handle communication with the remote host.

Exceptions

Параметр asyncResult равен null.asyncResult is null.

Параметр asyncResult не был создан вызовом метода BeginAccept(AsyncCallback, Object).asyncResult was not created by a call to BeginAccept(AsyncCallback, Object).

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket. Дополнительные сведения см. в разделе «Примечания».See the Remarks section for more information.

Socket был закрыт.The Socket has been closed.

Ранее был вызван метод EndAccept(IAsyncResult).EndAccept(IAsyncResult) method was previously called.

Этот метод доступен только в Windows NT.Windows NT is required for this method.

Examples

В следующем примере кода завершается асинхронный запрос и создается новый Socket для принятия входящего запроса на подключение.The following code example ends an asynchronous request and creates a new Socket to accept an incoming connection request. Полный пример, демонстрирующий асинхронную связь с сокетами, см. в статье примеры кода для сокетов.For a complete example that demonstrates asynchronous communications with sockets, see Socket Code Examples.

static void Listen_Callback( IAsyncResult^ ar )
{
   allDone->Set();
   Socket^ s = safe_cast<Socket^>(ar->AsyncState);
   Socket^ s2 = s->EndAccept( ar );
   StateObject^ so2 = gcnew StateObject;
   so2->workSocket = s2;
   s2->BeginReceive( so2->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None,
      gcnew AsyncCallback( &Async_Send_Receive::Read_Callback ), so2 );
}
public static void Listen_Callback(IAsyncResult ar){
     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);	
}
Public Shared Sub Listen_Callback(ar As IAsyncResult)
   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

Remarks

EndAccept завершает вызов BeginAccept.EndAccept completes a call to BeginAccept. Перед вызовом BeginAcceptнеобходимо создать метод обратного вызова, реализующий делегат AsyncCallback.Before calling BeginAccept, you need to create a callback method that implements the AsyncCallback delegate. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после того, как метод BeginAccept возвращает.This callback method executes in a separate thread, and is called by the system after the BeginAccept method returns. Он должен принять параметр asyncResult, возвращенный методом BeginAccept.It must accept the asyncResult parameter returned from the BeginAccept method.

В методе обратного вызова вызовите метод AsyncState параметра asyncResult, чтобы получить Socket, на который устанавливается попытка подключения.Within the callback method, call the AsyncState method of the asyncResult parameter to obtain the Socket on which the connection attempt is being made. После получения Socketможно вызвать метод EndAccept для успешного завершения попытки подключения.After obtaining the Socket, you can call the EndAccept method to successfully complete the connection attempt.

Метод EndAccept блокируется до тех пор, пока не будет ожидание подключения в очереди входящих подключений.The EndAccept method blocks until a connection is pending in the incoming connection queue. Метод EndAccept принимает входящее подключение и возвращает новый Socket, который можно использовать для отправки и получения данных с удаленного узла.The EndAccept method accepts the incoming connection and returns a new Socket that can be used to send data to and receive data from the remote host.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.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.

See also

Applies to