2009-08-08 2 views
3

Учитывая два ориентированных на поток объектов ввода-вывода в Asio, что является самым простым способом пересылки данных с одного устройства на другое в обоих направлениях? Может ли это быть сделано с boost::iostreams::combination или boost::iostreams:copy возможно? Или это ручной подход лучше - ожидание данных на каждом конце, а затем запись его в другой поток? Другими словами, как можно использовать Boost и Asio для получения минимального количества кода?Есть ли элегантный способ подключения двух устройств/потоков в Асио?

Пример приложения будет транслироваться между последовательным портом и TCP-сокетом в соответствии с запросом в this question.

ответ

4

Со стандартными потоками C++ вы можете сделать следующее, не можете ли вы сделать что-то подобное с Asio?

// Read all data from in and write to out. 
void forward_data(std::istream& in, std::ostream& out) 
{ 
    out << in.rdbuf(); 
} 
+0

Этот блок блокируется до тех пор, пока входной поток не будет закрыт? Как насчет двунаправленных потоков? –

+0

выход будет передаваться до тех пор, пока не будет достигнут конец файла, вам нужно будет изучить, как Asio реализует буфер; если конец файла отправляется, когда вход закрыт или нет. rdbuf() - метод std :: ios, поэтому он доступен как для std :: istream, так и для std :: ostream. – 2009-08-10 19:03:06

Смежные вопросы