Я клиентское приложение сервера, поток, как описано ниже:повышения :: ASIO :: async_write вопрос по последовательному каналу
клиента на окнах стороны и не использовать импульс сервера на стороне Linux и использует импульс клиент-сервер осуществляет связь по последовательному каналу 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();
На стороне сервера вы используете цикл событий io_service правильно? –
yes @Joachim Я правильно использовал цикл io_service. сразу после async_write я использовал io_service.run() и reset(). –
@Chirag Desai почему 'reset'? Можете ли вы показать код? Скорее всего, 'io_service' выходит из работы. –