Boost.Asio async_write / async_read - 程序无法正常通信

时间:2010-05-12 20:45:42

标签: 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));
 ....
}


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";
 ....
}

在服务器上我有“相同逻辑”代码:

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";
 ....
}

留言它只是一个结构。

客户端的输出是:Message was sent. 服务器上的输出为:I have a new message.

就是这样。在此之后,两个程序仍在工作但没有任何反应。 我试图实现代码:

if (!error)
{
 ....
}
else
{
 // close sockets and etc.
}

但是阅读或写作没有错误。两个程序都只是正常运行,但不会相互影响。 这段代码非常明显,但我无法理解为什么它不起作用。

提前感谢任何建议。

2 个答案:

答案 0 :(得分:0)

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

你可能想尝试像tcpdump或wireshark这样的工具来观察客户端和服务器之间的交换。

答案 1 :(得分:0)

我总是忘记在我的boost :: asio :: io_service上调用run()或poll()。你在打电话吗?因为boost需要定期调用才能发送/接收。