UNIX -domeneuttakets bruk

UNIX -domeneuttakets bruk
“Når data må byttes mellom prosesser som kjører på samme vertsoperativsystem, introduseres et UNIX -domeneuttak (UDS) som datakommunikasjonsenden. Kommunikasjonsuttak mellom prosesser, ofte kjent som UDS, er en type IPC-stikkontakt. Prosesser som kjører på samme CPU kan kommunisere effektivt på grunn av UNIX -domenetrekk. Bruk sokkelfunksjonen og AF_UNIX som sockets domene for å etablere et UNIX -domeneuttak. En UNIX -domeneuttak må være bundet til en spesifikk filbane ved hjelp av bindingsfunksjonen etter at den er opprettet. For å kommunisere effektivt mellom prosesser på samme datamaskin, implementeres AF_UNIX (ofte referert til som AF_LOCAL) Socket -familien.”

Tidligere var UNIX -domenetakene enten uidentifiserte eller koblet til et filsystemets banenavn. Innenfor denne artikkelen vil vi diskutere bruken av UNIX -domenekontakten.

La oss se et eksempel der vi brukte AF_UNIX Socket Domain Family for å utføre kommunikasjon mellom klient og server. Vi kan kjøre flere klienter igjen på en enkelt server, men for demo -formål bruker vi bare enkeltklienten som er koblet til en server. I dette tilfellet kommuniserer to forskjellige prosesser, en som kjører for serveren og en som kjører for en klient, på den samme datamaskinen som UNIX -domeneuttaket brukes. Opprett en fil ved hjelp av Vim Editor og navn.C Men du kan bruke Nano eller hvilken som helst annen redaktør.

Skriv inn de påfølgende kodelinjene i filen når den er åpen i innsatsmodus (Escape + I). Først, definer socketnavn -variabelen, i.e., Navnet på kommunikasjonsuttaket. I den midlertidige katalogen har vi lagt til sokkelfilen. De påfølgende kodelinjene kommer foran hovedfunksjonen, inkludert de nødvendige overskriftsfilene. Socket Name Structural Variable of Type Sockaddr_un er erklært. Lag fire variabler av heltallstypen som skal brukes senere. Opprettelsen av serveruttaket og kanalkommunikasjonen har blitt delt inn i følgende trinn:

1. Ved hjelp av Socket () Systemanrop og AF UNIX -flagget oppretter serveren et UNIX -domenetaket. Fremtidige systemanrop kan gjøres ved hjelp av filbeskrivelsen som denne metoden returnerer. Tilkoblingsuttaksvariabelen, som er en serverfilbeskrivelse, er testet i den betingede uttalelsen for å se om den inneholder -1, som angir at socketbyggingsprosessen mislyktes.

2. Deretter må vi bruke den bærbare memset -funksjonen for å tørke hukommelsen fullstendig. Sett kontaktenes slektsnavn til AF UNIX etter det.

3. For at klienten skal koble til, binder serveren kontakten til en kjent adresse ved hjelp av Bind () systemanropet, men før det, kopierer du Socket_name til Socket_name.sun_path variabel ved hjelp av string copy -metode (strcopy). Ved å bruke returresultatet i et betinget uttrykk, bestemmer vi om Bind -systemanropet var vellykket eller ikke.

4. Listen () systemanropet brukes av serveren for å utpeke en stikkontakt som passiv eller som en som vil godta innkommende tilkoblingsforespørsler fra klienter.

5. Klienten sender individuelle meldinger for hver av sine kommandolinjeinnganger. Serveren beregner summeret av innkommende meldinger. Kommandostrengen “End/Enter” sendes av klienten. Serveren svarer med en melding som inneholder klientens heltall lagt sammen. Etter å ha skrevet ut summen av inngangsverdier som svar fra serveren, går klienten ut. Så raskt som en ny klient kolleger, venter serveren ved å bruke loopen. Parameteren "ned" kan brukes til å avslutte serveren når klienten blir påkalt.

6. Tilkoblingslytting gjøres i den første for sløyfe, mens lese- og skriveoperasjoner påkalles i den andre sløyfen. Når du sender meldinger til klienter, bruker serveren skrivesystemanropet.

7. Etter det kan jevnaldrende stikkontakten nås via leste () og skrive () systemfunksjoner (i.e., å kommunisere mellom serveren og klienten).

8. Endelig skal serveren ringe den lukkede () metoden for å lukke forbindelsen etter at den er gjennom å få tilgang til kontakten.

Bruk opp kommandoen som er angitt på skjermbildet for å kompilere koden på Linux ved hjelp av GCC -kompilatoren. Denne kommandoen oppretter en server-navngitt utdatafil.

Her er klientsiden-filens kode på C-programmeringsspråket. Socketnavnet som brukes i serverfilen er også nødvendig for kommunikasjon. Lag et UNIX -domeneuttak etter import av nødvendige overskriftsfiler, ved å bruke den samme tilnærmingen som i serverfilen. Restkoden ligner på klienten ved å bruke System Call for å sende inndata til serveren. Parametrene i hovedfunksjonshodet brukes til å lese kommandolinjeinngangene, og deretter skriver vi dem ved hjelp av en for loop for å overføre til serveren. Vent på serverresponsen ved hjelp av lesemetoden etter en vellykket skriveoperasjon. Lesmetoden holder serverens svar i en buffer og viser den deretter på skjermen. Lukk sokkelforbindelsen etter denne kommunikasjonen.

La oss undersøke hvordan serveren og klienten samhandler. For å gjøre dette, trenger vi to terminaler, der vi først må kjøre serverutgangsfilen før vi starter klienten og sender innganger til serveren. Klienten går ut etter å ha lest og vist serverens svar.

I tilfelle bindadressen allerede er i bruk, bruker du i dette tilfellet SO_REUSEADDR som socketalternativ.

Hvis serveren er frakoblet og en klient vil koble til, vil utdataene være som nedenfor.

Hvis en klient ikke oppgir noe inngangsnummer:

Hvis klienten angir et nummer mens han kommuniserer med serveren, vil serveren legge til tallene og svare på klienten ved å vise resultatet.

Å slå av serveren på klientforespørsel

Konklusjon

I denne artikkelen har vi demonstrert bruken av både klientsiden og serversiden for å bruke UNIX-domenetaket. For dette har vi prøvd den enkle C -koden for begge sider i operativsystemet Kali Linux. Vi håper du vil få god hjelp fra denne artikkelen.