2013-03-21 94 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

回答

相關問題