Boost.Asio async\u write/async\u read-程序无法正常通信

Boost.Asio async\u write/async\u read-程序无法正常通信,boost,asynchronous,boost-asio,messages,Boost,Asynchronous,Boost Asio,Messages,你好 我正在尝试使用boost::asio实现一个问答逻辑 关于客户,我有: void Send_Message() { .... boost::asio::async_write(server_socket, boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Client::Handle_Write_Message, this, boost::asio::placeholders::error));

你好

我正在尝试使用boost::asio实现一个问答逻辑

关于客户,我有:

void Send_Message()
{
 ....
 boost::asio::async_write(server_socket, boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Client::Handle_Write_Message, this, boost::asio::placeholders::error));
 ....
}


void Handle_Write_Message(const boost::system::error_code& error)
{
 ....
 std::cout << "Message was sent.\n";
 ....
 boost::asio::async_read(server_socket_,boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Client::Handle_Read_Message, this, boost::asio::placeholders::error));
 ....
}

void Handle_Read_Message(const boost::system::error_code& error)
{
 ....
 std::cout << "I have a new message.\n";
 ....
}
但是在阅读或写作中没有错误。这两个程序只是正常运行,但彼此不交互。 这个代码很明显,但我不明白为什么它不工作


提前感谢您的建议。

底层套接字是unix还是inet套接字


您可能想尝试使用tcpdump或wireshark之类的工具来监视客户端和服务器之间的交换。

我总是忘记在boost::asio::io_服务上调用run()或poll()。你这么叫吗?因为boost需要周期性地调用以发送/接收。

io_服务正在运行,如boost::asio:boost::thread t(boost::bind(&boost::asio::io_服务::run,&io_服务))的示例所示;
void Read_Message()
{
 ....
 boost::asio::async_read(client_socket, boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Server::Handle_Read_Message, this, boost::asio::placeholders::error));
 ....
}


void Handle_Read_Message(const boost::system::error_code& error)
{
 ....
 std::cout << "I have a new message.\n";
 ....
 boost::asio::async_write(client_socket_,boost::asio::buffer(&Message, sizeof(Message)), boost::bind(&Server::Handle_Write_Message, this, boost::asio::placeholders::error));
 ....
}


void Handle_Write_Message(const boost::system::error_code& error)
{
 ....
 std::cout << "Message was sent back.\n";
 ....
}
if (!error)
{
 ....
}
else
{
 // close sockets and etc.
}