C++ ASIO库-未调用处理程序
我对ASIO boost库有问题。问题在于异步函数 这是简单的服务器代码C++ ASIO库-未调用处理程序,c++,unix,boost,boost-asio,C++,Unix,Boost,Boost Asio,我对ASIO boost库有问题。问题在于异步函数 这是简单的服务器代码 void handle_accept( const boost::system::error_code& error ) { std::cout << "Someone connected" << std::endl; } void handle_read( const boost::system::error_code& error ) { printf( "Me
void handle_accept( const boost::system::error_code& error )
{
std::cout << "Someone connected" << std::endl;
}
void handle_read( const boost::system::error_code& error )
{
printf( "Message: %s \n", somedata);
}
int main()
{
std::cout << "Starting server ....\n" << std::endl;
try
{
boost::asio::io_service io_service;
tcp::socket mysocket(io_service);
tcp::acceptor myacceptor(io_service, tcp::endpoint(tcp::v4(), 5000));
myacceptor.async_accept( mysocket, boost::bind( &handle_accept, boost::asio::placeholders::error));
mysocket.async_receive( boost::asio::buffer(somedata, 1024) , boost::bind( &handle_read, boost::asio::placeholders::error) );
io_service.run();
std::cout << "END. \n" << std::endl;
sleep(5);
} catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
void handle\u accept(常量boost::system::error\u代码和错误)
{
std::cout接收立即完成,因为它无法等待,因为它没有什么可等待的。TCP侦听套接字上永远不会收到任何数据。仅在连接的套接字上调用async\u receive
。接收立即完成,因为它无法等待,因为它没有什么可等待的。永远不会重新发送任何数据在TCP侦听套接字上接收。仅在连接的套接字上调用async\u receive
。您通常从handle\u accept
函数内部启动接收/发送循环。检查Asio和。还需要检查处理程序中的错误代码,因为调用处理程序并不意味着它有错误ucceeded。您通常从handle\u accept
函数内部开始接收/发送周期。检查Asio和。您还需要检查处理程序中的错误代码,因为调用处理程序并不意味着它已成功。因此,这意味着,当作为客户机调用handle\u accept时,我应该调用async\u receive连接?是的。通常在接收处理程序返回之前再次调用它。因此,这意味着,当客户端连接时调用handle\u accept时,我应该调用async\u receive?是的。通常在接收处理程序返回之前再次调用它。
int main()
{
std::cout << "Starting client ....\n" << std::endl;
try
{
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), "localhost", "5000");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket mysocket(io_service);
boost::asio::connect(mysocket, endpoint_iterator);
sleep(5);
sprintf( somedata, "This is a message i sent.");
mysocket.send( boost::asio::buffer(somedata, 1024) );
} catch (std::exception& e)
{
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}