C++11 asio程序在完成异步写入之前退出

C++11 asio程序在完成异步写入之前退出,c++11,boost-asio,C++11,Boost Asio,我正在用boost Asio进行一些测试,我不明白为什么异步写入函数(即lambda函数)的处理程序没有被调用 #include <iostream> #include <boost/asio.hpp> using namespace boost::asio; int main() { io_service service; std::string str = std::string("HTTP/1.1 200 OK\r\n ......");

我正在用boost Asio进行一些测试,我不明白为什么异步写入函数(即lambda函数)的处理程序没有被调用

#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;

int main() {
    io_service service;
    std::string str = std::string("HTTP/1.1 200 OK\r\n ......");

    ip::tcp::acceptor my_acceptor{ service, ip::tcp::endpoint(ip::tcp::v4(), 6767) };
    ip::tcp::socket my_socket{ service };
    my_acceptor.async_accept(my_socket, [&my_socket, str](boost::system::error_code) {
        std::cout << "connected " << std::endl;

        async_write(my_socket, boost::asio::buffer(str), [&my_socket](boost::system::error_code, std::size_t) {
            std::cout << "Data written" << std::endl;

        });

    });

    service.run();
}
#包括
#包括
使用名称空间boost::asio;
int main(){
io_服务;
std::string str=std::string(“HTTP/1.1200正常\r\n……”);
ip::tcp::acceptor my_acceptor{service,ip::tcp::endpoint(ip::tcp::v4(),6767)};
ip::tcp::socket my_socket{service};
my_acceptor.async_accept(my_socket,[&my_socket,str](boost::system::error\u代码){

std::cout代码对我来说运行良好

您是否有足够的权限在端口80上侦听

你确定没有其他人在听吗

试一试

  • 在不同的端口上运行(例如,6767而不是80)
  • 打印
    ec的消息
例如

#包括
#包括
使用名称空间boost::asio;
int main(){
io_服务;
std::string str=std::string(“HTTP/1.1200正常\r\n……”);
ip::tcp::acceptor my_acceptor{service,ip::tcp::endpoint(ip::tcp::v4(),6767)};
ip::tcp::socket my_socket{service};
my_acceptor.async_accept(my_socket,[&my_socket,&str](boost::system::error\u code ec){
国际单项体育联合会(欧共体){

代码对我来说运行良好

您是否有足够的权限在端口80上侦听

你确定没有其他人在听吗

试一试

  • 在不同的端口上运行(例如,6767而不是80)
  • 打印
    ec的消息
例如

#包括
#包括
使用名称空间boost::asio;
int main(){
io_服务;
std::string str=std::string(“HTTP/1.1200正常\r\n……”);
ip::tcp::acceptor my_acceptor{service,ip::tcp::endpoint(ip::tcp::v4(),6767)};
ip::tcp::socket my_socket{service};
my_acceptor.async_accept(my_socket,[&my_socket,&str](boost::system::error\u code ec){
国际单项体育联合会(欧共体){

格式化和避免无用的手动内存管理是你的第一道防线格式化和避免无用的手动内存管理是你的第一道防线
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;

int main() {
    io_service service;
    std::string str = std::string("HTTP/1.1 200 OK\r\n ......");

    ip::tcp::acceptor my_acceptor{ service, ip::tcp::endpoint(ip::tcp::v4(), 6767) };
    ip::tcp::socket my_socket{ service };
    my_acceptor.async_accept(my_socket, [&my_socket, &str](boost::system::error_code ec) {
        if (ec) {
            std::cerr << "Oops: " << ec.message() << "\n";
        } else {
            std::cout << "connected " << std::endl;

            async_write(my_socket, boost::asio::buffer(str), [&my_socket](boost::system::error_code ec, std::size_t) {
                if (ec) {
                    std::cerr << "Oops: " << ec.message() << "\n";
                } else {
                    std::cout << "Data written" << std::endl;
                }
            });
        }
    });

    service.run();
}