[英]Why is this simple server not accepting connections?
I just started with boost asio and manipulated a code snippet I found online of a simple server. 我刚开始使用boost asio并操纵了我在网上发现的一个简单服务器的代码片段。 Here is the code
这是代码
void OnAccept( const boost::system::error_code & ec, boost::shared_ptr< boost::asio::ip::tcp::socket > sock )
{
if( ec )
{
std::cout << "[" << boost::this_thread::get_id()<< "] Error: " << ec << std::endl;
}
else
{
std::cout << "[" << boost::this_thread::get_id()<< "] Accepted!" << std::endl;
}
}
void RunServer()
{
boost::shared_ptr< boost::asio::io_service > io_service(new boost::asio::io_service);
boost::shared_ptr< boost::asio::ip::tcp::acceptor > acceptor(new boost::asio::ip::tcp::acceptor( *io_service ));
boost::shared_ptr< boost::asio::ip::tcp::socket > sock( new boost::asio::ip::tcp::socket( *io_service ) );
try
{
boost::asio::ip::tcp::resolver resolver( *io_service );
boost::asio::ip::tcp::resolver::query query( "127.0.0.1", boost::lexical_cast< std::string >( 7777 ));
boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve( query );
acceptor->open( endpoint.protocol() );
acceptor->set_option( boost::asio::ip::tcp::acceptor::reuse_address( false ) );
acceptor->bind( endpoint );
acceptor->listen( boost::asio::socket_base::max_connections );
acceptor->async_accept( *sock, boost::bind( OnAccept, _1, sock ) );//Receives only one connection
std::cout << "Waiting for incoming connections \n";
while(true)
{
Sleep(400);
}
}
catch( std::exception & ex )
{
std::cout << "[" << boost::this_thread::get_id()<< "] Exception: " << ex.what() << std::endl;
}
}
int main( int argc, char * argv[] )
{
boost::thread server(RunServer);
std::cout << "Press any key to stop..\n";
std::cin.get();
return 0;
}
The code unfortunately is not accepting connections. 遗憾的是,代码不接受连接。 I tried
telnet localhost 7777
but it does not accept connections any suggestions ? 我试过
telnet localhost 7777
但它不接受连接任何建议?
You are starting an async accept, but you are not allowing the io_service
to run. 您正在启动异步接受,但您不允许运行
io_service
。 You need to either do a synchronous acecpt or call call io_service->run()
. 您需要执行同步acecpt或调用
io_service->run()
。 The relevant part will become: 相关部分将成为:
std::cout << "Waiting for incoming connections \n";
io_service->run();
}
I suggest that you compare Daytime.2 - A synchronous TCP daytime server and Daytime.3 - An asynchronous TCP daytime server 我建议您比较Daytime.2 - 同步TCP日间服务器和Daytime.3 - 异步TCP日间服务器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.