Utilisation de la prise de domaine Unix

Utilisation de la prise de domaine Unix
«Lorsque des données doivent être échangées entre des processus exécutés sur le même système d'exploitation hôte, une prise de domaine UNIX (UDS) est introduite comme point de terminaison de communication des données. La douille de communication interprète, souvent appelée UDS, est un type de prise IPC. Les processus exécutés sur le même processeur peuvent communiquer efficacement en raison des prises de domaine UNIX. Utilisez la fonction de socket et af_unix comme domaine de la prise pour établir une prise de domaine Unix. Une prise de domaine Unix doit être liée à un chemin de fichier spécifique en utilisant la fonction de liaison une fois sa création. Pour communiquer efficacement entre les processus sur le même ordinateur, la famille de douilles AF_UNIX (communément appelée AF_Local) est mise en œuvre."

Dans le passé, les prises de domaine Unix n'étaient pas identifiées ou liées à un chemin de chemin du système de fichiers. Dans cet article, nous discuterons de l'utilisation de la prise de domaine Unix.

Voyons un exemple où nous avons utilisé la famille AF_Unix Socket Domain Family pour effectuer la communication entre le client et le serveur. Nous pouvons exécuter à nouveau plusieurs clients sur un seul serveur, mais à des fins de démonstration, nous utilisons simplement le client unique connecté à un serveur. Dans ce cas, deux processus différents, l'un en cours pour le serveur et un fonctionnant pour un client, communiquent sur le même ordinateur pour lequel la prise de domaine Unix est utilisée. Créez un fichier à l'aide de l'éditeur VIM et nommez IT Server1.c mais vous pouvez utiliser nano ou tout autre éditeur.

Tapez les lignes de code suivantes dans le fichier lorsqu'elle est ouverte en mode insert (Escape + I). Tout d'abord, définissez la variable du nom de socket, i.e., Le nom de la prise de communication. Dans le répertoire temporaire, nous avons ajouté le fichier de socket. Les lignes de code suivantes se présentent avant la fonction principale, y compris les fichiers d'en-tête nécessaires. La variable structurelle du nom de socket de type sockaddr_un est déclarée. Créez quatre variables du type entier à utiliser plus tard. La création du socket serveur et de la communication de canal a été divisée en étapes suivantes:

1. En utilisant l'appel système Socket () et l'indicateur AF Unix, le serveur crée une prise de domaine Unix. Les appels système futurs peuvent être effectués en utilisant le descripteur de fichier que cette méthode renvoie. La variable de socket de connexion, qui est un descripteur de fichiers de serveur, est testée dans l'instruction conditionnelle pour voir si elle contient -1, ce qui indique que le processus de construction de socket a échoué.

2. Ensuite, nous devons utiliser la fonction MEMSET portable pour essuyer complètement la mémoire. Définissez le nom de famille du socket sur AF Unix après cela.

3. Pour que le client se connecte, le serveur lie le socket à une adresse bien connue à l'aide de l'appel Système Bind (), mais avant cela, copiez le socket_name sur le socket_name.Variable SUN_PATH en utilisant la méthode de copie de chaîne (StrCopy). En utilisant le rendement, un résultat dans une expression conditionnelle, nous déterminons si l'appel du système de liaison a été réussi ou non.

4. L'appel Système Listen () est utilisé par le serveur pour désigner une prise comme passive ou comme celle qui acceptera les demandes de connexion entrantes des clients.

5. Le client envoie des messages individuels pour chacune de ses entrées de ligne de commande. Le serveur calcule les sommes des messages entrants. La chaîne de commande «end / entre» est envoyée par le client. Le serveur répond avec un message qui contient les entiers du client additionnés. Après avoir imprimé la somme des valeurs d'entrée en réponse par le serveur, le client sort. Aussi rapidement qu'un nouveau client s'associe, le serveur attend en utilisant la boucle. Le paramètre «vers le bas» peut être utilisé pour terminer le serveur lorsque le client est invoqué.

6. L'écoute de connexion est effectuée dans le premier pour la boucle, tandis que les opérations de lecture et d'écriture sont invoquées dans la deuxième boucle. Lors de l'envoi de messages aux clients, le serveur utilise l'appel du système d'écriture.

7. Après cela, la prise par les pairs peut être atteinte via les fonctions du système read () et écriture () (i.e., pour communiquer entre le serveur et le client).

8. Enfin, le serveur doit appeler la méthode close () pour fermer la connexion après avoir accédé à l'accès à la prise.

Utilisez la commande indiquée dans la capture d'écran pour compiler le code sur Linux à l'aide du compilateur GCC. Cette commande crée un fichier de sortie nommé serveur.

Voici le code du fichier côté client dans le langage de programmation C. Le nom de socket utilisé dans le fichier serveur est également nécessaire pour la communication. Créez une prise de domaine Unix après l'importation des fichiers d'en-tête nécessaires, en utilisant la même approche que dans le fichier serveur. Le code de repos est similaire au client à l'aide de l'appel système écrite () pour envoyer une entrée au serveur. Les paramètres de l'en-tête de fonction principale sont utilisés pour lire les entrées de la ligne de commande, puis nous les écrivons en utilisant une boucle pour transmettre au serveur. Attendez la réponse du serveur en utilisant la méthode de lecture après une opération d'écriture réussie. La méthode de lecture conserve la réponse du serveur dans un tampon, puis l'affiche à l'écran. Fermez la connexion de la prise après cette communication.

Examinons comment le serveur et le client interagissent. Pour ce faire, nous aurons besoin de deux terminaux, où nous devons d'abord exécuter le fichier de sortie du serveur avant de lancer le client et d'envoyer des entrées au serveur. Le client sort après avoir lu et affiché la réponse du serveur.

Dans le cas où la tension de liaison est déjà utilisée, dans ce cas, utilisez le SO_REUSEADDR comme option de socket.

Si le serveur est hors ligne et qu'un client veut se connecter, la sortie serait comme celle ci-dessous.

Si un client ne fournit aucun numéro d'entrée:

Si le client entre un numéro lors de la communication avec le serveur, le serveur ajoutera les chiffres et répondra au client en affichant le résultat.

Pour fermer le serveur sur la demande du client

Conclusion

Dans cet article, nous avons démontré l'utilisation du côté client et du côté serveur pour utiliser la prise de domaine Unix. Pour cela, nous avons essayé le code C simple pour les deux côtés dans le système d'exploitation Kali Linux. Nous espérons que vous obtiendrez une bonne aide de cet article.