Je pense que c'est mieux si j'explique la situation pour que cela ne semble pas une question trop obscure. Je souhaite publier du code de démarrage pour un projet sur lequel je souhaite que certains de mes étudiants travaillent. Le projet consiste à parcourir certaines pages Web Internet et, en tant que tel, je souhaite leur fournir une classe URLStream qui téléchargera le html d'une URL d'entrée et le leur renverra sous forme de chaîne.

Le problème est que je n'arrive pas à trouver un moyen particulièrement agréable de gérer le réseautage d'une manière qui sera multiplateforme (les étudiants ont des machines mac / windows / linux). Je connais des bibliothèques comme Boost asio et libCurl, mais le problème avec leur utilisation est que je ne peux pas forcer tous mes étudiants à les télécharger. Ma question est donc double:

  1. Existe-t-il un moyen efficace de leur fournir ce code de réseau multiplateforme?
  2. Si une bibliothèque est le seul moyen de le faire, existe-t-il un moyen de joindre la bibliothèque au projet de démarrage afin que les étudiants n'aient pas à le télécharger? Je sais que c'est peut-être une question stupide, mais je n'arrive pas à savoir si cela est possible.
5
gowrath 21 avril 2017 à 11:40

3 réponses

Meilleure réponse

L'API sockets Berkeley est l'API de socket de bas niveau la plus courante. Il est pris en charge sur toutes les plates-formes POSIX, ce qui signifie que Linux et macOS l'auront.

Même Windows l'a, mais avec une légère torsion puisque les sockets ne sont pas des descripteurs comme ils le sont sur les systèmes POSIX.

L'utilisation directe de sockets conduira à plus de code passe-partout, mais il est certainement possible de l'utiliser pour créer un client HTTP simple qui ne prend en charge que de simples requêtes GET.

Il existe de nombreux tutoriels et références sur l'utilisation des sockets. Le Le guide de la programmation réseau de Beej semble être un didacticiel populaire, qui devrait contenir des notes sur les ajustements nécessaires pour Les fenêtres.

2
Some programmer dude 21 avril 2017 à 09:26

bibliothèque C ++ multiplateforme pour la programmation réseau

Asio est une bibliothèque C ++ multiplateforme pour la programmation réseau qui fournit aux développeurs un modèle d'E / S asynchrone cohérent utilisant une approche C ++ moderne. Il a récemment été accepté dans Boost.

J'ai copié cela à partir de la fenêtre d'informations de Synaptic. Si vous utilisez Linux, installez la bibliothèque (et sa documentation) ainsi:

Sudo apt-get install libasio-dev libasio-doc

0
user8468899user8468899 21 janv. 2018 à 20:45

Boost.Asio n'est vraiment pas adapté à vos besoins car il implique un énorme Boost et la construction d'au moins certaines de ses bibliothèques sans en-tête uniquement. Vous pouvez toujours envisager la Asio lib qui peut être utilisée sans Boost et est lib en-tête uniquement, donc beaucoup moins de tracas pour vous et vos élèves. Comme il s'agit probablement de la bibliothèque C ++ de réseautage la plus populaire et la plus moderne, cet exercice peut fournir une expérience utile aux étudiants. Les exemples Asio ont également un simple client HTTP.

En remarque, êtes-vous lié au C ++ pour cette mission? Ce serait beaucoup plus simple en Python ou dans des langages similaires qui fournissent un réseau prêt à l'emploi.

2
Andriy Tylychko 21 avril 2017 à 10:27