мой ответ

жен написать асинхронный TCP-сервер. TCP-сервер должен управляться консолью (например: удалить клиента, показать список всех подключенных клиентов и т. Д.)

Проблема заключается в следующем: как я могу подключить (или написать) консоль, которая может вызывать вышеупомянутые функции. Эта консоль должна быть клиентом? Должен ли я запускать этот консольный клиент как отдельный поток?

Я прочитал много уроков и не смог найти решение своей проблемы.

Код ServerTCP

class ServerTCP
{
public:
   ServerTCP(boost::asio::io_service& A_ioService, unsigned short A_uPortNumber = 13)
      : m_tcpAcceptor(A_ioService, tcp::endpoint(tcp::v4(), A_uPortNumber)), m_ioService (A_ioService)
   {
      start();
   }
private:

   void start()
   {
      ClientSessionPtr spClient(new ClientSession(m_tcpAcceptor.io_service(), m_connectedClients));

      m_tcpAcceptor.async_accept(spClient->getSocket(), 
                                 boost::bind(&ServerTCP::handleAccept, this, spClient, 
                                 boost::asio::placeholders::error));

   }
   void handleAccept(ClientSessionPtr A_spNewClient,  const boost::system::error_code& A_nError)
   {
      if ( !A_nError )
      {
         A_spNewClient->start();
         start();
      }
   }



   boost::asio::io_service& m_ioService;
   tcp::acceptor            m_tcpAcceptor;
   Clients                  m_connectedClients;
};

Основная функция:

   try
   {
      boost::asio::io_service ioService;

      ServerTCP server(ioService);
      ioService.run();  
   }
   catch (std::exception& e)
   {
      std::cerr << "Exception: " << e.what() << "\n";
   }

Привет Сэм. Спасибо за ответ. Не могли бы вы быть так добры и показать мне какой-нибудь фрагмент кода или несколько ссылок на примеры, связанные с этой проблемой? Вероятно, я не правильно понимаю "... однопоточный сервер ..."

Фактически в «консоли», где я хочу управлять серверными операциями, мне нужно smt, как показано ниже:

main()

cout << "Options: q - close server, s - show clients";
while(1)
{
  char key = _getch();
  switch( key )
  {
      case 'q':
         closeServer();
      break
      case 's':
         showClients();
      break
  } 
}

Ответы на вопрос(2)

Ваш ответ на вопрос