我必须写异步TCP Sever的。 TCP服务器必须通过管理控制台(用于如:删除客户端,所有连接的客户端的显示列表中,ETCC ..)
问题是:我怎么能把(或写)控制台,它可以在上面的功能调用。 此控制台必须是一个客户端? 我应该运行此控制台客户端作为sepearate线程?
我读了很多的教程和我couldn`t找到一个解决我的问题。
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";
}
您好萨姆。 谢谢你的答复。 你可能会这么好心给我看一个部分的代码或一些链接的例子涉及这个问题? Propably,我不`吨正确理解“......单线程服务器...”
在“控制台”事实,我要管理服务器的操作,我需要一个像下面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
}
}