POSIX-liitäntä tai yksinkertaisesti liitäntä määritellään tiedonsiirron päätepisteeksi. Jos esimerkiksi kaksi osapuolta, A ja B, aikovat olla yhteydessä toisiinsa, vaaditaan, että molemmat osapuolet muodostavat yhteyden päätelaitteidensa välille. Liitäntä tarjoaa kommunikoiville osapuolille yhdyskäytävän, jonka kautta viestit kulkevat. Jos puhumme asiakkaasta ja palvelimesta, palvelinpuolen liitännän tehtävänä on kuunnella saapuvia yhteyksiä, kun taas asiakaspuolen liitäntä on vastuussa yhteyden muodostamisesta palvelinpuolen liitäntään. Tämän artikkelin tarkoituksena on tehdä C-ohjelmoinnilla varustetun POSIX-liitännän käsitteestä paljon selkeämpi.
Esimerkki Posix Socketin käytöstä C-ohjelmoinnilla Linux Mint 20: ssä
Tässä osiossa esitelty esimerkki osoittaa asiakkaan ja palvelimen välisen vuorovaikutuksen. Asiakas ja palvelin ovat kaksi asiakas- / palvelinmallin kokonaisuutta laskentamaailmassa. Esimerkissämme sekä asiakas että palvelin lähettävät ja vastaanottavat viestejä toisilleen ja toisiltaan samalla käyttäessään POSIX-Socketia C-ohjelmoinnilla Linux Mint 20: ssä. Selvyyden lisäämiseksi koodin ymmärtämisessä olemme erottaneet asiakaspuolen koodin ja palvelinpuolen koodin ja selitämme molemmat sinulle erikseen alla.
Palvelinpuolen koodi
Palvelinpuolen koodia varten olemme yksinkertaisesti luoneet tyhjän asiakirjan Linux Mint 20 -järjestelmän kotihakemistoon ja nimenneet sen palvelimeksi.c. Tyhjään asiakirjaan sinun on kirjoitettava koodinpätkät, jotka näkyvät kolmessa alla olevassa kuvassa:
Yllä olevissa kuvissa näkyvä koodi saattaa tuntua pitkältä, yritetään kuitenkin ymmärtää se erittäin helposti. Ensinnäkin olemme luoneet liitännän ja liittäneet sen haluttuun porttinumeroon, joka on tapauksessamme 8080. Sitten olemme kirjoittaneet kuuntelutoiminnon, joka on tarkoitettu etsimään kaikki saapuvat yhteydet asiakkailta. Pohjimmiltaan asiakas onnistuu muodostamaan yhteyden palvelimeen vain tämän kuuntelutoiminnon läsnäolon vuoksi. Ja kun tämä yhteys on muodostettu, palvelin on valmis lähettämään ja vastaanottamaan tietoja asiakkaalle ja asiakkaalta.
Luku- ja lähetystoiminnot palvelevat vastaavasti viestien vastaanottamista ja lähettämistä asiakkaille. Olemme jo määrittäneet koodissamme oletusviestin, jonka aiomme lähettää asiakkaallemme, eli "Hei palvelimelta". Kun olet lähettänyt tämän viestin asiakkaalle, se näkyy asiakkaan puolella, kun taas palvelimen puolella näkyy viesti "Hei viesti lähetetty". Kyse on palvelinpuolen koodistamme.
Asiakaspuolen koodi
Asiakaspuolen koodia varten olemme jälleen kerran luoneet tyhjän asiakirjan Linux Mint 20 -järjestelmän kotihakemistoon ja nimenneet sen asiakkaaksi.c. Tyhjään asiakirjaan sinun on kirjoitettava koodinpätkät, jotka näkyvät kahdessa alla olevassa kuvassa:
Yllä olevissa kuvissa esitetyssä asiakaspuolen koodissa olemme luoneet pistorasian samalla tavalla kuin palvelinpuolen koodille. Sitten on yhdistämistoiminto, joka yrittää muodostaa yhteyden palvelimeen määritetyn portin kautta. Ja kun palvelin on hyväksynyt tämän yhteyden, asiakas ja palvelin on asetettu lähettämään ja vastaanottamaan viestejä toisilleen ja toisiltaan.
Jälleen, aivan kuten palvelinpuolen koodi, lähetys- ja lukutoiminnot ovat lähettämään ja vastaanottamaan viestejä palvelimelta. Olemme myös maininneet oletusviestin, jonka haluamme lähettää palvelimelle, ja se on "Hei asiakkaalta". Kun olet lähettänyt tämän viestin palvelimelle, tämä viesti näkyy palvelimen puolella, kun taas asiakkaan puolella näkyy viesti "Hei viesti lähetetty". Ja tämä vie meidät asiakaspuolen koodin selityksen loppuun.
Asiakas- ja palvelinpuolen koodien kokoaminen ja suorittaminen
On selvää, että tallennamme sekä asiakas- että palvelinpuolen tiedostot kirjoitettuamme nämä ohjelmat, sitten olemme kaikki valmiita kääntämään ja suorittamaan nämä koodit. Siksi voimme visualisoida uuden luodun asiakkaan ja palvelimen välisen vuorovaikutuksen. Tämän tavoitteen saavuttamiseksi meidän on käynnistettävä kaksi erilaista päätelaitetta, koska meidän on tarkoitus suorittaa kaksi erillistä ohjelmaa. Yksi pääte on omistettu palvelinpuolen koodin ajamiselle ja toinen asiakaspuolen koodille.
Joten palvelinpuolen koodin kokoamiseksi suoritamme seuraavan komennon ensimmäisessä terminaalissa:
$ gcc -palvelin.c -o-palvelinTämän palvelimen suorittamisen jälkeen, jos palvelinpuolen koodissa ei ole virheitä, päätelaitteessa ei näy mitään, mikä on osoitus onnistuneesta kääntämisestä.
Samalla tavalla käännämme asiakaspuolen koodin alla esitetyllä komennolla suorittamalla sen toisessa päätelaitteessa:
$ gcc -asiakas.c -o asiakas
Kun molemmat koodit on koottu, suoritamme ne yksitellen. Meidän on kuitenkin ensin suoritettava palvelinpuolen koodi, koska sen on tarkoitus kuunnella yhteyspyyntöjä. Palvelinpuolen koodi voidaan suorittaa seuraavalla komennolla:
$ ./ palvelin
Palvelinpuolen koodin suorittamisen jälkeen voimme suorittaa asiakaspuolen koodin alla esitetyllä komennolla:
$ ./asiakas
Kun sekä asiakas että palvelin ovat toiminnassa, seuraat seuraavissa kuvissa esitettyjä lähtöjä molemmissa päätelaitteissa:
Johtopäätös
Toivottavasti, kun olet käynyt läpi tässä artikkelissa kanssasi jaetun esimerkin, pystyt käyttämään POSIX-liitäntöjä tehokkaasti tietojen lähettämiseen ja vastaanottamiseen asiakkaan ja palvelimen välillä. Tämä esimerkki on vain perusesittely C-ohjelmoinnilla varustetuista Posix-liitännöistä, mutta voit jopa tehdä näistä ohjelmista monimutkaisempia tarpeidesi mukaan.