Boost, отправка файлов по сети с использованием TCP, предпочитаемый метод?

В примерах ускорения в документации tcp: iostream используется для очень простой отправки потоков по сети. В других примерах write () используется для записи данных в сокет вместо этого с использованием немного большего количества кода.

В чем разница между этими двумя методами? Плюсы и минусы? Есть ли что-то еще, что следует использовать вместо этого?


person Milan    schedule 06.04.2009    source источник


Ответы (2)


Я никогда не использовал Boost API, поэтому, читатель, будьте осторожны ...;)

Кажется, что tcp :: iostream позволяет вам взаимодействовать с сокетом с потоковым интерфейсом. Этот подход абстрагирует сложности, связанные с программированием сокетов, поэтому он будет предпочтительнее, особенно если вы новичок в программировании сокетов. Это имеет большой смысл для обмена данными на основе TCP. Это особенно удобно, если вы выполняете очень простой обмен данными, например запрос / ответ.

Однако бывают случаи, когда вам нужен более низкий уровень контроля над обменом данными. Если ваш получатель получает несколько сообщений одновременно, вы можете предпочесть читать каждое сообщение из сокета, а не обрабатывать их постфактум из iostream. На стороне отправителя, если ваши сообщения структурированы как объекты, часто проще просто отправить объект вместо того, чтобы сначала преобразовать объект в поток. В этом случае предпочтительнее использовать функцию чтения / записи.

Исходя из моего собственного опыта программирования сокетов (без ускорения), я обычно предпочитаю иметь дело с функциями нижнего уровня, поскольку это дает мне большую гибкость, хотя и немного сложнее. Надеюсь, это поможет.

person Matt Davis    schedule 06.04.2009

Я не использовал boost для сетевых коммуникаций, но полагаю, что набор классов «ip :: tcp» обертывает базовую коммуникацию на основе сокетов в C ++. Использование метода ускорения может быть проще, поскольку в нем уже реализована асинхронная связь. Обычная связь через сокеты гибкая, но громоздкая. Используйте его только в том случае, если приложение критично к производительности. Но с "ip :: tcp" есть некоторые подводные камни, такие как необходимость очищать поток каждый раз, когда вы что-то пишете в него (‹< std :: flush), но я думаю, что преимущества перевешивают недостатки.

person Gayan    schedule 06.04.2009