C++ boost::asio::async\u接受未调用处理程序

C++ boost::asio::async\u接受未调用处理程序,c++,boost,asio,C++,Boost,Asio,以boost为例 正是在组装的过程中,它开始工作。 然后将实现从接口带到SSL_Server.h、SSL_Server.cpp、Session.h、Session.cpp,main将其带到Serv.cpp 因此,不会调用处理程序!!!我不明白原因是什么 SSL_Server.h #ifndef SSL_SERVER #define SSL_SERVER #define BOOST_ASIO_ENABLE_HANDLER_TRACKING #include "Session.h&q

以boost为例

正是在组装的过程中,它开始工作。 然后将实现从接口带到SSL_Server.h、SSL_Server.cpp、Session.h、Session.cpp,main将其带到Serv.cpp 因此,不会调用处理程序!!!我不明白原因是什么

SSL_Server.h

#ifndef SSL_SERVER
#define SSL_SERVER

#define BOOST_ASIO_ENABLE_HANDLER_TRACKING

#include "Session.h"
#include <functional>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>

using boost::asio::ip::tcp;

class SSL_Server
{
public:
SSL_Server(boost::asio::io_context& io_context, unsigned short port);
private:
void do_accept();
std::string get_password() const;
private:
tcp::acceptor acceptor_;
boost::asio::ssl::context context_;
};
#endif
Serv.cpp

#include "Server_SSL.h"

int main(int argc, char* argv[])
{
        if (argc != 2)
        {
            std::cerr << "Usage: server <port>\n";
            return 1;
        }

        boost::asio::io_context io_context;
        SSL_Server s(io_context, 3333);
        io_context.run();

    return 0;
}
#包括“Server_SSL.h”
int main(int argc,char*argv[])
{
如果(argc!=2)
{

std::cerr我看不出代码有什么问题。事实上,它适合我。但是,您需要工作目录中存在的证书、密钥和DH param文件

我没有看到太多的显式错误处理,因此我认为这可能是您的问题:

context_.use_certificate_chain_file("server.crt", ec);
if (ec) throw boost::system::system_error(ec);

context_.use_private_key_file("server.key", boost::asio::ssl::context::pem, ec);
if (ec) throw boost::system::system_error(ec);

context_.use_tmp_dh_file("dh2048.pem", ec);
if (ec) throw boost::system::system_error(ec);
注 我使用了boost示例中的server.pem和dh2048.pem文件,因此

context_.use_certificate_chain_file("server.pem", ec);
if (ec) throw boost::system::system_error(ec);

context_.use_private_key_file("server.pem", boost::asio::ssl::context::pem, ec);
if (ec) throw boost::system::system_error(ec);

我看不出代码有什么问题。事实上,它适合我。但是,您需要工作目录中存在的证书、密钥和DH param文件

我没有看到太多的显式错误处理,因此我认为这可能是您的问题:

context_.use_certificate_chain_file("server.crt", ec);
if (ec) throw boost::system::system_error(ec);

context_.use_private_key_file("server.key", boost::asio::ssl::context::pem, ec);
if (ec) throw boost::system::system_error(ec);

context_.use_tmp_dh_file("dh2048.pem", ec);
if (ec) throw boost::system::system_error(ec);
注 我使用了boost示例中的server.pem和dh2048.pem文件,因此

context_.use_certificate_chain_file("server.pem", ec);
if (ec) throw boost::system::system_error(ec);

context_.use_private_key_file("server.pem", boost::asio::ssl::context::pem, ec);
if (ec) throw boost::system::system_error(ec);
context_.use_certificate_chain_file("server.pem", ec);
if (ec) throw boost::system::system_error(ec);

context_.use_private_key_file("server.pem", boost::asio::ssl::context::pem, ec);
if (ec) throw boost::system::system_error(ec);