Envoyer une fonction 2 C

Envoyer une fonction 2 C
«Pour envoyer un message à partir d'une prise à un autre canal, nous pouvons utiliser les fonctions System Send (), SendTo () et SendMsg () du langage C dans le système Kali Linux. Nous pouvons invoquer la fonction Send () lorsque la prise est connectée (afin que le destinataire prévu soit connu). L'existence de drapeaux est le seul différenciateur entre Send () et écriture (2) fonctions. La fonction Send () est équivalente à écrire (2) avec un paramètre Flags de zéro. De plus, l'appel suivant est équivalent à WQ1 Send (socket_file_descriptor, tampon, longueur, drapeaux);
sendto (socket_file_descriptor, tampon, longueur, drapeaux, null, 0);

Le descripteur de fichiers de la prise d'envoi est contenu dans l'argument socket_file_descriptor. Le message est situé dans un tampon et a une longueur pour send () et sendto (). Nous avons besoin d'un serveur et des terminaux clients pour comprendre pratiquement la fonctionnalité de la fonction Send (). À cette fin, nous devons écrire le code pour le serveur ainsi que pour le client. En utilisant l'éditeur VIM, créez un serveur.C Fichier de programmation. Ceci est la commande pour ouvrir un fichier de codage dans l'éditeur VIM."

Après avoir inclus les fichiers d'en-tête nécessaires dans les cinq premières lignes du serveur.Fichier C, nous définissons une variable de port et définissons sa valeur sur 8000. Après le lancement de la fonction principale, nous déclarons trois variables de type entier appelé Server FD (descripteur de fichiers de serveur), une nouvelle prise et un message lus dans la première ligne. Déclarez la variable d'adresse du type de sockaddr après cela.

Ensuite, nous définissons la valeur d'une option variable à être 1. En utilisant la fonction size_of, qui est égale à l'adresse, définissez la variable de longueur d'adresse. Réglez la taille du tampon variable du tableau de type caractéristique sur 1024 et définissez les valeurs sur 0. Un message de variable de type caractéristique est ensuite défini et étant donné la valeur de «Salut, je suis un serveur. Comment puis-je t'aider?". Les types d'adresses avec lesquels votre prise peuvent communiquer sont désignées par l'adresse Family AF_INET (dans ce cas, Internet Protocol V4 Adresses).

Dans une instruction conditionnelle, affectez le descripteur du fichier du serveur et vérifiez si l'affectation provoque une erreur. S'il échoue, affichez le message d'erreur «Socket a échoué» et laissez la fonction principale. À l'aide de la fonction setSockOPT (), un programme d'application peut gérer comment une prise se comporte. Parce que le port 8080 n'est pas disponible, nous fixons de force la prise au port 8000 dans cette expression conditionnelle. Nous lions délibérément la prise du serveur au port 8080 dans la deuxième ligne conditionnelle. Si le processus de liaison ne s'est pas déroulé comme prévu, utilisez la méthode Perror pour afficher un message d'erreur et la fonction de sortie pour laisser la fonction principale. Vérifiez si le serveur écoute la demande du client dans la troisième expression conditionnelle.

Nous acceptons la connexion du serveur et définissons la nouvelle valeur de socket dans la quatrième instruction conditionnelle, indiquant que le serveur reçoit la demande du client. Le message envoyé par le client à l'aide de la prise et du tampon doit maintenant être lu. Le message client sera ensuite affiché sur l'écran du terminal et envoyé au client indiqué au début de la fonction principale. Fermez la prise et fermez le canal à l'aide du mécanisme d'arrêt après qu'une communication réussie a eu lieu tout en passant le descripteur du fichier serveur et fermez la commande RDWR.

Fermez l'éditeur VIM et compilez le code en utilisant le compilateur GCC. Enregistrez le fichier de sortie ou d'objet dans le fichier serveur:

Il est maintenant temps de tester si le code du serveur est en cours d'exécution ou non une fois qu'il a terminé la compilation. Utilisez le./ Script serveur à l'intérieur du terminal et de la touche Entrée pour ce faire. Lorsque le curseur clignote, le serveur est actif et attend une demande du client:

Nous devons maintenant écrire le code client à l'aide de l'éditeur VIM et l'enregistrer dans le client.c fichier.

Le code du client s'affiche à l'écran ci-dessous. Il comprend les fichiers d'en-tête dans les premières lignes et définit le port utilisé pour la communication entre le serveur et le client à 8000. Créez trois variables de type entier et définissez la valeur des chaussettes sur 0 à l'intérieur de la fonction principale. Ensuite, faites une variable avec le sockaddr en type. Définissez une variable de message avec la valeur «Salutations du client!»Et enregistrez-le.

Utilisez maintenant une instruction conditionnelle pour créer la prise et enregistrer la valeur à la variable de socket. Les adresses IPv4 ou IPv6 sont ensuite converties du texte en binaire. Nous utilisons la valeur par défaut du serveur 127.0.0.1 adresse IP. Nous utilisons la fonction INET_PTON pour cette raison. Ensuite, nous créons le code pour utiliser la fonction de connexion pour se connecter à la prise et définir le descripteur du fichier client. L'adresse du serveur lui a été fournie. Nous sommes maintenant prêts à utiliser la fonction d'envoi pour transmettre le message au serveur.

La prise, le message, la longueur du message et le drapeau qui est défini sur 0 - sont tous inclus dans la méthode d'envoi. Afficher le terminal sur le client lorsque le message a été envoyé. Puis lisez la réponse du serveur et affichez-la à l'écran. Fermez le descripteur de fichier après une communication réussie.

Compilez maintenant le code comme indiqué dans l'extrait ci-dessous.

Vous devez garder à l'esprit que vous devez exécuter le serveur avant d'exécuter le client car si le serveur ne répond pas, le client ne se connectera pas et un message d'erreur apparaîtra à l'écran. En cas de panne de communication, c'est la sortie.

Voici la capture d'écran d'une communication réussie sur le côté du serveur:

Sur le côté client:

Conclusion

Dans cet article, nous avons démontré l'utilisation de la fonction Send () de C dans le programme Kali Linux. Sachez que nous ne pouvons pas interagir sur le même terminal, nous devons donc en ouvrir deux, un pour le serveur et un autre pour le client. Cet exemple peut être ajusté selon les besoins de l'utilisateur.