gpt4 book ai didi

c++ - Boost asio、async_read 和 acync_write 不调用回调

转载 作者:行者123 更新时间:2023-11-28 04:58:58 25 4
gpt4 key购买 nike

我正在封装 boost-asio 套接字,但我遇到了一个问题,但是 async_readasync_write 都没有调用它们的回调功能,我不明白为什么。

我试过使用 async_read_some 但遇到了同样的问题。

这是我到目前为止编写的代码

#include <iostream>
#include "socket.hpp"

Socket::Socket()
{
boost::asio::ip::tcp::endpoint ep_tmp(boost::asio::ip::tcp::v4(), 4242);

endpoint = ep_tmp;
acceptor = new boost::asio::ip::tcp::acceptor(ios, endpoint);
tcp_socket = new boost::asio::ip::tcp::socket(ios);
acceptor->listen();
}

Socket::~Socket()
{
delete(acceptor);
delete(tcp_socket);
}

void Socket::get_connection()
{
acceptor->async_accept(*tcp_socket, [](const boost::system::error_code &ec)
{
std::cout << "Connection received." << std::endl;
if (ec)
std::cout << "Error " << ec << std::endl;
});
this->exec();
}

void Socket::send(std::string &message)
{
async_write(*tcp_socket, boost::asio::buffer(message),
[](const boost::system::error_code &ec,
std::size_t bytes_transferred)
{
std::cout << "Sending datas." << std::endl;
if (ec)
std::cout << "Error " << ec << std::endl;
else
std::cout << bytes_transferred << " bytes transferred." << std::endl;
});
}

void Socket::receive(void)
{
char *buf;

buf = (char *)malloc(sizeof(char) * 50);
buf = (char *)memset(buf, 0, 50);
async_read(*tcp_socket, boost::asio::buffer(buf, 50),
[](const boost::system::error_code &ec,
std::size_t bytes_transferred)
{
std::cout << "Receiving datas." << std::endl;
if (ec)
std::cout << "Error " << ec << std::endl;
else
std::cout << bytes_transferred
<< " bytes transferred." << std::endl;
});
}

void Socket::exec(void)
{
ios.run();
}

int main()
{
Socket serv;
std::string data_test;

data_test = "Test\n";
serv.get_connection();
serv.send(data_test);
serv.exec();
serv.receive();
serv.exec();
return (0);
}

malloc 位是临时的,直到我找到一种不使用 C 的方法。

如果有人能在这个问题上启发我,我将非常感激

最佳答案

你必须调用io_service::reset在第二次和以后调用 io_service::run 之前。您可能想改用同步 API,因为您当前的方法完全违背了异步性的目的。

关于c++ - Boost asio、async_read 和 acync_write 不调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46532264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com