Envoi d'une chaîne sur UDP en C++
Je voudrais envoyer une chaîne de caractères: "Jane Doe"
à l'intranet ip 192.168.0.4
de port 9000
sur UDP. Je l'ai fait plusieurs fois via UDP et TCP en Java, mais maintenant je dois le faire avec les bibliothèques C++ standard, et je n'en trouve que des exemples de sujets où les gens ne peuvent tout simplement pas faire le travail.
Je sais que je dois coder "Jane Doe"
sous forme de tableau d'octets il suffit ensuite d'ouvrir le socket de l'emballer dans le datagramme et de l'envoyer.
C++ n'est pas ma première langue, ce qui est une petite partie de code je ne peux pas comprendre, j'ai choisi UDP car il est toujours beaucoup plus simple que TCP.
Je serais probablement utiliser Boost ASIO. Si je ne pouvais pas l'utiliser (pour quelque raison que ce soit), je serais probablement utiliser la classe que j'ai posté dans une réponse sur CodeReview. Comme il est, ce code est spécifique à Windows, mais presque uniquement des pièces spécifiques à Windows sont les
veuillez choisir une réponse
socket_user
classe et la #pragma comment lib
ligne (je crois que ce sont seulement les pièces, mais je n'ai pas testé).veuillez choisir une réponse
OriginalL'auteur Yoda | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de code Unix.
Si c'est de la programmation sous Windows:
SOCKET
au lieu deint
.closesocket
au lieu declose
#include <winsock2.h>
à la place de tous ceux unix en-têtesun peu tâtillon, aujourd'hui, ne sommes-nous? Vous ne devriez downvote une réponse si c'est complètement faux ou conduisent les OP à un mauvais endroit. Downvoting parce que vous n'aimez pas le style de codage n'est pas appelée pour. Et si vous pensez que vous avez un mieux pour répondre à l'OP de la question, par tous les moyens de poster une réponse. Je pourrais même upvote moi-même. J'ai fait supprimer les en-têtes de la réponse pour le garder plus concis.
Il est clairement indiqué:
If you see misinformation, vote it down.
Honnêtement, je pensais que tu avais copié le code à partir de quelque part, car il ne vient pas avec toute la documentation. En outre, il contient quelques erreurs (en effet, il ne fonctionne pas):sendto
nécessite 6 arguments, pas 4. Enfin, la conversion de chaîne de caractères littérale dechar *
est obsolète et dangereux.juste des points. Je viens de précipité une réponse ce matin pour faire les OP débloqué 😉 Par demande populaire, la réponse a été modifié à une compilation et la solution qui en fait compile et s'exécute. La conversion à l'appui de Windows et IPv6 est un exercice gauche jusqu'à l'OP, mais il y a des indications en haut de la réponse. Merci pour votre fidélité.
La meilleure source de "échantillons et de la technique à laquelle on est censé de référence" est "Beej Guide de Programmation du Réseau". beej.us/guide/bgnet
OriginalL'auteur selbie
C'est très facile à faire si vous êtes prêt à utiliser la bibliothèque boost.
Voici le code snippit
\0
?si vous ne voulez pas avoir des littéraux de chaîne, vous pouvez simplement mettre en octets: et adresse IPv4 prend 4 octets avec des valeurs entre 0 et 255 (inclus). Et nous savons tous les 2^8 = 256 combinaisons possibles pour les 8 bits = 1 octet
char[] aurait un terminateur null, mais ce n'est pas la même chose qu'un std:chaîne de caractères (ce qui je pense est utilisé ici) de ce que je comprends. donc, Si il avait fait un tableau de caractères, puis le \0 wold être prévu, de sorte que la taille serait de 9. stackoverflow.com/questions/11752705/...
OriginalL'auteur James Wierzba