Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个简单的服务器不接受连接?_C++_Boost Asio - Fatal编程技术网

C++ 为什么这个简单的服务器不接受连接?

C++ 为什么这个简单的服务器不接受连接?,c++,boost-asio,C++,Boost Asio,我刚开始使用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

我刚开始使用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;
}
void OnAccept(const boost::system::error\u code&ec,boost::shared\u ptrsock)
{
国际单项体育联合会(欧共体)
{
std::cout async_accept(*sock,boost::bind(OnAccept,_1,sock));//只接收一个连接

std::cout您正在启动一个异步接受,但不允许运行
io\u服务。您需要执行同步acecpt或调用
io\u服务->运行()
。相关部分将变为:

    std::cout << "Waiting for incoming connections \n";
    io_service->run();
}
std::cout run();
}

我建议您进行比较,然后

您觉得问题可能出在哪里?它是否会写下“等待传入连接”?是的,它确实做到了这一点。但它从不接受连接。我认为它在RunServer()中线程结束后,它也会强制其子线程接受连接结束。因此,我在其中添加了一个while循环,以使其保持aliveas@TAS,指出i0->service将阻塞,直到所有任务完成。