Boost, отправка файлов по сети с использованием tcp, предпочтительный метод? - PullRequest
3 голосов
/ 06 апреля 2009

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

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

Ответы [ 2 ]

2 голосов
/ 07 апреля 2009

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

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

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

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

1 голос
/ 06 апреля 2009

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

...