2009-04-06 8 views
3

Dans les exemples de boost de la documentation, tcp: iostream est utilisé pour envoyer très simplement des flux sur le réseau. Dans d'autres exemples, write() est utilisé pour écrire des données sur le socket à la place avec un peu plus de code impliqué.Boost, l'envoi de fichiers sur le réseau en utilisant tcp, méthode préférée?

Quelle est la différence entre ces 2 méthodes? Avantages et inconvénients? Y a-t-il autre chose à utiliser à la place?

Répondre

2

Je ne l'ai jamais utilisé l'API de boost, alors méfiez-vous ... lecteur;)

Le tcp :: iostream semble vous permettre d'interagir avec la prise d'une interface de flux semblable. Cette approche fait abstraction des complexités associées à la programmation des sockets, il serait donc préférable, surtout si vous êtes novice en programmation de sockets. Cela a beaucoup de sens pour le partage de données basé sur TCP. C'est particulièrement pratique si vous faites des échanges de données très simples, tels que la demande/réponse.

Cependant, dans certains cas, vous avez besoin d'un contrôle de niveau inférieur sur l'échange de données. Si votre récepteur reçoit plusieurs messages en même temps, vous préférerez peut-être lire chaque message de la socket au lieu de les traiter après le fait depuis l'iostream. Du côté de l'expéditeur, si vos messages sont structurés en tant qu'objets, il est souvent plus facile de simplement envoyer l'objet au lieu de convertir l'objet en premier dans un flux. La fonctionnalité de lecture/écriture serait préférable dans ce cas. De ma propre expérience de programmation de socket (sans boost), je préfère généralement travailler avec les fonctions de bas niveau car cela me donne plus de flexibilité même si c'est un peu plus complexe. J'espère que ça aide.

1

Je n'ai pas utilisé boost pour les communications réseau, mais je suppose que l'ensemble de classes "ip :: tcp" enveloppent la communication basée sur socket sous-jacente en C++. L'utilisation de la méthode boost peut être plus simple puisqu'elle a déjà implémenté une communication asynchrone. La communication par socket normale est flexible mais encombrante. Utilisez-le uniquement si l'application est critique en termes de performances. Mais il y a quelques pièges avec "ip :: tcp" comme avoir à vider le flux chaque fois que vous y écrivez quelque chose (< < std :: flush) mais je pense que les avantages pèsent sur les inconvénients.

Questions connexes