web-dev-qa-db-fra.com

Mise en réseau avec C++

Je suis un nouveau venu dans l’utilisation du C++, mais j’ai une idée générale de sa syntaxe et de sa facilité d’utilisation. Je souhaite cependant apprendre à communiquer sur les réseaux par le biais de la programmation C++, mais je ne trouve pas de didacticiel spécifiquement dédié au C++ .. Est-ce que quelqu'un connaît de bonnes ressources pour apprendre à utiliser la mise en réseau avec C++ ou par quoi commencer?

27
TopGunCoder

Compte tenu de votre nouveauté en C++, je ne recommanderais pas de construire directement sur les API de sockets, à moins que vous ne puissiez trouver aucune bibliothèque appropriée à utiliser. Boost.Asio vous donnera une longueur d'avance considérable et vous exposera aux abstractions de niveau supérieur utilisées dans la programmation réseau.

Lorsque vous commencez à construire un système basé sur des sockets, il est facile d'obtenir quelque chose qui «fonctionne» et de passer ensuite des semaines à déboguer des incidents qui ne se produisent que dans des conditions de temps et de charge réelles. Utiliser boost::asio correctement n’est pas une mince affaire, même si cela protège les développeurs de la complexité de la gestion des sockets brutes. 

Si l'objectif est d'apprendre à utiliser correctement les sockets bruts (ou un autre mécanisme de transport tel que RPC), lancez-vous à l'aide d'exemples et de documents en ligne pour comprendre les API BSD ou Winsock individuelles - si l'objectif est de résoudre Utilisez le plus rapidement possible un problème lié à un code de haute qualité, tant du côté des entreprises que de l’infrastructure réseau, puis utilisez une bonne bibliothèque réseau. Dans ce cas, votre question indique un désir d'apprendre. Par conséquent, utiliser une bibliothèque peut ne pas être le meilleur moyen d'atteindre votre objectif déclaré.

26
Steve Townsend

Vous devriez consulter ces guides sur:

Et Boost.Asio Look here pour une question sur la documentation liée à Boost.Asio

9
user225312

Je suis sûr qu'un groupe de personnes C++ qui méprisent la manière de faire des choses me détesteront pour cela, mais l'approche classique consiste à utiliser les Berkeley socket APIs (ainsi appelés parce qu'ils sont issus de BSD) . Si vous ciblez Windows, les API "inspirées par Unix et largement compatibles avec les sources" sont appelées Winsock . Je dirais de faire une recherche sur le Web pour tutoriel de socket et vous obtiendrez probablement des informations utiles. Avec un peu de soin et peut-être un #ifdef ou deux, il n'est pas si difficile de créer du code qui fonctionne sous Linux, BSD, Mac (qui fournissent des sockets BSD) et Windows (avec Winsock) en utilisant ce qui est commun entre ces deux interfaces.

Pour les personnes plus enclines au C++, moins au style C, ou celles qui n'aiment pas coder contre les API de système d'exploitation, je suis sûr qu'il existe des bibliothèques C++ qui fournissent des wrappers et des abstractions pour ces mêmes concepts. Puisque Boost semble être assez populaire, je dirais voyez ce qu’ils ont .

7
asveikau

Cela n’est pas pris en charge par la bibliothèque standard de C++, vous devez donc utiliser l’API du système ou une bibliothèque d’abstraction, par exemple. QT.

1
fschmitt

C++ est un langage orienté objet et ouvert, vous pouvez donc emprunter auprès d’autres langages, notamment le C, mais voici quelques livres qui pourraient vous aider. http://wjyl.nuaa.edu.cn/kfyy/article/C++%20Network%20Programming%20Volume%201.pdf et peut-être http://www.cs.wustl.edu/~schmidt/ PDF/ACE-tutorial.pdf parmi beaucoup d'autres. il y en a d'autres là aussi. 

1
Olupot Douglas
0
bmeric

Peut-être Boost.Asio ou celui-ci (Unicomm) basé sur il conviendra

0
4xy