我有客户端服务器应用程序,流程如下所述:
客户端在 Windows 端,不使用 boost 服务器在 linux 端,使用 boost 客户端-服务器通过串行通道 RS485 进行通信。和服务器使用boost::asio::async_write
.
client --> calls command with specific command_id --> server
client <-- sends acknowledgement <-- server
{server process the command, meanwhile the client is blocked for response}
client <-- sends response <-- server
有时客户端收到确认但没有收到响应,即使响应是由服务器发送的。当客户端发送另一个命令时,客户端稍后会收到待处理的响应。
如果我boost::asio::write
用于串行通信,则完全没有问题。
下面是 async_write 的代码片段
boost::asio::async_write(serial_port, boost::asio::buffer(&v_chunk[0], v_chunk.size()),
boost::bind(&Serial_channel::async_write_callback, this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
io_serv->run();
io_serv->reset();