Я должен написать асинхронный 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
}
}