Socket.EndAccept Метод

Определение

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

Перегрузки

EndAccept(Byte[], IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом. Этот метод возвращает буфер, который содержит начальные данные для передачи.

EndAccept(IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.

EndAccept(Byte[], Int32, IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом. Этот метод возвращает буфер, который содержит начальные данные и число переданных байтов.

EndAccept(Byte[], IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом. Этот метод возвращает буфер, который содержит начальные данные для передачи.

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

Параметры

buffer
Byte[]

Массив типа Byte, который содержит переданные байты.

asyncResult
IAsyncResult

Объект IAsyncResult, в котором хранятся сведения о состоянии для этой асинхронной операции, а также любые данные, определенные пользователем.

Возвращаемое значение

Socket

Объект Socket для связи с удаленным узлом.

Исключения

Этот метод доступен только в Windows NT.

Объект Socket закрыт.

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

Параметр asyncResult не был создан вызовом метода BeginAccept(AsyncCallback, Object).

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

Произошла ошибка при попытке доступа к объекту Socket.

Примеры

В следующем примере кода используется BeginAccept для создания и подключения сокета, а также для принятия начальных 10 байт данных. Делегат обратного вызова вызывает метод EndAccept для завершения асинхронного запроса. Число переданных байтов и данные возвращаются в buffer bytesTransferred параметрах и этого метода и отображаются в консоли.

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

Комментарии

EndAccept завершает вызов BeginAccept . Перед вызовом необходимо BeginAccept создать метод обратного вызова, который вызывается AsyncCallback делегатом. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после того, как BeginAccept метод возвращает значение.

В методе обратного вызова вызовите AsyncState метод asyncResult параметра, чтобы получить объект, для Socket которого выполняется попытка подключения. После получения Socket можно вызвать EndAccept метод для успешного завершения попытки подключения. bufferПараметр этой перегрузки содержит данные, полученные при вызове функции, BeginAccept а bytesTransferred параметр содержит число байтов, переданных в вызове.

EndAcceptМетод блокируется до завершения подключения в очереди входящих подключений. EndAcceptМетод принимает входящее соединение и возвращает новый объект Socket , который может использоваться для отправки и получения данных с удаленного узла.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Применяется к

EndAccept(IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.

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

Параметры

asyncResultresult
IAsyncResult

Объект IAsyncResult, в котором хранятся сведения о состоянии для этой асинхронной операции, а также любые данные, определенные пользователем.

Возвращаемое значение

Socket

ОбъектSocket для связи с удаленным узлом.

Исключения

asyncResult имеет значение null.

Параметр asyncResult не был создан вызовом метода BeginAccept(AsyncCallback, Object).

Произошла ошибка при попытке доступа к сокету. Дополнительные сведения см. в разделе "Примечания".

Socket был закрыт.

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

Этот метод доступен только в Windows NT.

Примеры

В следующем примере кода завершается асинхронный запрос и создается новый объект Socket , принимающий входящий запрос на подключение. Полный пример, демонстрирующий асинхронную связь с сокетами, см. в статье примеры кода для сокетов.

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

Комментарии

EndAccept завершает вызов BeginAccept . Перед вызовом необходимо BeginAccept создать метод обратного вызова, который реализует AsyncCallback делегат. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после того, как BeginAccept метод возвращает значение. Он должен принять asyncResult параметр, возвращенный BeginAccept методом.

В методе обратного вызова вызовите AsyncState метод asyncResult параметра, чтобы получить объект, для Socket которого выполняется попытка подключения. После получения Socket можно вызвать EndAccept метод для успешного завершения попытки подключения.

EndAcceptМетод блокируется до завершения подключения в очереди входящих подключений. EndAcceptМетод принимает входящее соединение и возвращает новый объект Socket , который может использоваться для отправки и получения данных с удаленного узла.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

См. также раздел

Применяется к

EndAccept(Byte[], Int32, IAsyncResult)

Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом. Этот метод возвращает буфер, который содержит начальные данные и число переданных байтов.

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

Параметры

buffer
Byte[]

Массив типа Byte, который содержит переданные байты.

bytesTransferred
Int32

Количество переданных байтов.

asyncResult
IAsyncResult

Объект IAsyncResult, в котором хранятся сведения о состоянии для этой асинхронной операции, а также любые данные, определенные пользователем.

Возвращаемое значение

Socket

Объект Socket для связи с удаленным узлом.

Исключения

Этот метод доступен только в Windows NT.

Объект Socket закрыт.

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

Параметр asyncResult не был создан вызовом метода BeginAccept(AsyncCallback, Object).

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

Произошла ошибка при попытке доступа к объекту Socket.

Примеры

В следующем примере кода используется BeginAccept для создания и подключения сокета, а также для принятия начальных 10 байт данных. Делегат обратного вызова вызывает метод EndAccept для завершения асинхронного запроса. Число переданных байтов и данные возвращаются в buffer bytesTransferred параметрах и этого метода и отображаются в консоли.

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

Комментарии

EndAccept завершает вызов BeginAccept . Перед вызовом необходимо BeginAccept создать метод обратного вызова, который вызывается AsyncCallback делегатом. Этот метод обратного вызова выполняется в отдельном потоке и вызывается системой после того, как BeginAccept метод возвращает значение. Он должен принять asyncResult параметр, возвращенный BeginAccept методом.

В методе обратного вызова вызовите AsyncState метод asyncResult параметра, чтобы получить объект, для Socket которого выполняется попытка подключения. После получения Socket можно вызвать EndAccept метод для успешного завершения попытки подключения. bufferПараметр этой перегрузки содержит данные, полученные при вызове функции, BeginAccept а bytesTransferred параметр содержит число байтов, переданных в вызове.

EndAcceptМетод блокируется до завершения подключения в очереди входящих подключений. EndAcceptМетод принимает входящее соединение и возвращает новый объект Socket , который может использоваться для отправки и получения данных с удаленного узла.

Примечание

Если вы получаете SocketException , используйте SocketException.ErrorCode свойство для получения конкретного кода ошибки. после получения этого кода ознакомьтесь с подробным описанием ошибки в документации по коду ошибки API Windows sockets версии 2 .

Примечание

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Применяется к