2013-03-21 97 views
1

我刚刚开始使用boost asio并操纵我在线发现的一个简单服务器的代码片段。这里是代码为什么这个简单的服务器不接受连接?

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; 
} 

代码不幸的是不接受连接。我试过telnet localhost 7777但它不接受任何建议?

+0

如果你觉得这个问题可能是什么?它是否写出“等待传入连接”? – 2013-03-21 19:21:23

+0

是的,它确实达到了这一点。但它从不接受连接。我认为它在RunServer()线程结束之后也强制它的子线程接受连接结束。因此,我在其中添加了一个while循环以保持活动 – MistyD 2013-03-21 19:26:14

+0

@TAS指出,i0->服务将阻塞,直到完成所有任务。 – MistyD 2013-03-21 19:31:28

回答

相关问题