2010-01-07 7 views
0

Actuellement, je travaille sur un logiciel client/serveur multiplateforme C/C++. Je suis un développeur très expérimenté en matière de développement de socket de bas niveau. Le problème avec Berkley Sockets/Winsock, c'est que vous devez toujours faire une sorte d'analyseur pour obtenir les choses du bon côté du récepteur. Je veux dire, vous devez interpréter les données, et concaténer les paquets afin de transmettre correctement. (les paquets sont souvent tranchés)Quel est le meilleur moyen (le plus simple) de transférer des données en C/C++?

Gardez à l'esprit que la communication va être bidirectionnelle. Le socket pur est-il le meilleur moyen de transmettre des données de nos jours? Recommanderiez-vous SOAP, Webservices ou un autre type d'encapsulation à cette application?

+2

Lequel est-ce? C ou C++? – dreamlax

+0

dreamlax, C++ est préféré. – gmuller

Répondre

1

De nos jours, de nombreuses personnes utilisent les services Web et SOAP. Il existe des paquets C++ disponibles à cet effet. Ceux-ci utiliseront des sockets pour vous et gérer toutes les querelles de données. Si vous êtes sous Unix/Linux, donnez ou prenez des poignées de réseau System V.4, vos données finiront par voyager sur des sockets.

Sous Windows, il y a d'autres choix si vous souhaitez uniquement parler à d'autres boîtes Windows.

Vous pouvez également regarder dans CORBA, mais ce n'est pas la pratique courante.

1

Dans tout transfert de données, il sera nécessaire de sérialiser et de désérialiser les objets.

La première question que vous voulez poser est de savoir si vous voulez un format binaire ou texte pour le transfert. Les formats de données binaires ont le net avantage de pouvoir être facilement analysés (à condition qu'ils soient de simples structures POD - vous pouvez simplement les transformer en structure).

Les transferts de texte devraient être plus faciles à déboguer puisque vous pouvez simplement lire le texte. Vous allez toujours devoir les analyser.

Les services Web SOAP sont de simples paquets XML envoyés normalement par HTTP. Quelque chose devra analyser le HTTP et le XML. La facilité d'utilisation n'est pas intrinsèque mais plutôt dépendante des outils à votre disposition. Si vous avez de bons outils, par tous les moyens, mais la même chose s'applique à toute forme d'échange de données. Vous pouvez jeter un oeil à la Boost Serialization Library. C'est une bibliothèque assez complexe et vous oblige à écrire du code indiquant quels membres doivent être sérialisés. Il a un bon support à la fois pour la sérialisation de texte (y compris xml) et binaire. C'est aussi une plateforme croisée.

+0

Si vous avez le même architectore des deux côtés du transfert, il n'est pas nécessaire de sérialiser. –

+0

La sérialisation est la partie la plus facile. Je pense que le pire est d'analyser les objets sur le tampon de réception et de les extraire. C'est pourquoi j'ai demandé. – gmuller

+1

L'analyse syntaxique est le processus de désérialisation. Si vous utilisez des structures de taille fixe binaire, vous n'avez pas besoin de faire quoi que ce soit pour l'analyser - vous venez de vider les données bindary dans les structures pertinentes. @Neil - même si vous avez la même architecture, vous devez prendre une représentation peut-être complexe de vos données en mémoire et l'envoyer d'une manière ou d'une autre par octet par le fil de la vue. sérialisé. – doron

Questions connexes