美好的一天。
我正在尝试使用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.
}
但是阅读或写作没有错误。两个程序都只是正常运行,但不会相互影响。 这段代码非常明显,但我无法理解为什么它不起作用。
提前感谢任何建议。
答案 0 :(得分:0)
底层套接字是unix还是inet套接字?
你可能想尝试像tcpdump或wireshark这样的工具来观察客户端和服务器之间的交换。
答案 1 :(得分:0)
我总是忘记在我的boost :: asio :: io_service上调用run()或poll()。你在打电话吗?因为boost需要定期调用才能发送/接收。