【发布时间】:2011-07-09 19:24:27
【问题描述】:
我必须编写异步 TCP Sever。 TCP Server 必须由控制台管理 (例如:删除客户端、显示所有已连接客户端的列表等)
问题是:如何附加(或编写)控制台,它可以调用上述功能。 这个控制台必须是客户端?我应该将此控制台客户端作为单独的线程运行吗?
我已经阅读了很多教程,但我找不到解决问题的方法。
服务器TCP代码
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
}
}
【问题讨论】:
标签: c++ boost tcp boost-asio