POSIX Socket alebo jednoducho Socket je definovaný ako komunikačný koncový bod. Napríklad, ak dve strany, A a B, majú v úmysle komunikovať navzájom, bude potrebné, aby obe tieto strany nadviazali spojenie medzi svojimi príslušnými koncovými bodmi. Zásuvka poskytuje komunikujúcim stranám bránu, cez ktorú správy putujú. Ak hovoríme o klientovi a serveri, úlohou serverovej zásuvky bude počúvanie prichádzajúcich pripojení, zatiaľ čo zásuvka na strane klienta bude zodpovedná za pripojenie k zásuvke na strane servera. Tento článok je zameraný na omnoho jasnejšie poňatie konceptu POSIX socketu s programovaním C.
Príklad použitia zásuvky Posix s programovaním C v systéme Linux Mint 20
Príklad uvedený v tejto časti predvedie interakciu medzi klientom a serverom. Klient a server sú dve hlavné entity modelu klient / server vo svete výpočtovej techniky. V našom príklade bude klient aj server odosielať a prijímať správy navzájom a od seba, pričom bude využívať POSIX Socket s programovaním C v Linux Mint 20. Pre zaistenie jasnosti v porozumení kódu sme oddelili kód na strane klienta a kód na strane servera a obidva vám vysvetlíme osobitne nižšie.
Kód na strane servera
Pre kód na strane servera sme jednoducho vytvorili prázdny dokument v domovskom adresári nášho systému Linux Mint 20 a pomenovali sme ho server.c. Do tohto prázdneho dokumentu musíte napísať útržky kódu zobrazené na troch obrázkoch nižšie:
Kód zobrazený na obrázkoch vyššie sa môže javiť ako zdĺhavý. Pokúsme sa ho však pochopiť veľmi ľahko. Najskôr sme vytvorili zásuvku a pripojili sme ju k požadovanému číslu portu, čo je v našom prípade 8080. Potom sme napísali funkciu počúvania, ktorá je tu na vyhľadanie všetkých prichádzajúcich spojení od klientov. V zásade sa klientovi podarí pripojiť k serveru iba kvôli prítomnosti tejto funkcie počúvania. Akonáhle je toto spojenie nadviazané, server je nastavený na odosielanie a prijímanie údajov do a z klienta.
Funkcie čítania a odosielania slúžia na účely prijímania a odosielania správ klientom. V našom kóde sme už definovali predvolenú správu, ktorú chceme poslať nášmu klientovi, a to „Dobrý deň zo servera“. Po odoslaní tejto správy klientovi sa zobrazí na strane klienta, zatiaľ čo na strane servera sa zobrazí správa „Hello message sent“. Toto je všetko o našom kóde na strane servera.
Kód na strane klienta
Teraz sme pre kód na strane klienta opäť vytvorili prázdny dokument v domovskom adresári nášho systému Linux Mint 20 a nazvali sme ho klient.c. Do tohto prázdneho dokumentu musíte napísať útržky kódu zobrazené na dvoch obrázkoch nižšie:
V kóde na strane klienta zobrazenom na obrázkoch vyššie sme vytvorili soket rovnakým spôsobom, ako sme to urobili pre kód na strane servera. Potom existuje funkcia pripojenia, ktorá sa pokúsi nadviazať spojenie so serverom prostredníctvom zadaného portu. Akonáhle toto pripojenie server prijme, bude klient a server nastavený na odosielanie a prijímanie správ navzájom.
Opäť, rovnako ako kód na strane servera, sú tu aj funkcie odosielania a čítania na odosielanie a prijímanie správ zo servera. Tiež sme spomenuli predvolenú správu, ktorú chceme poslať na server, a to „Dobrý deň od klienta“. Po odoslaní tejto správy na server sa táto správa zobrazí na strane servera, zatiaľ čo na strane klienta sa zobrazí správa „Hello message sent“. A tým sa dostávame na koniec vysvetlenia nášho kódu na strane klienta.
Kompilácia a spustenie kódov klienta a servera
Je zrejmé, že po napísaní týchto programov budeme ukladať súbory na strane klienta aj na strane servera, potom budeme nastavení na kompiláciu a spustenie týchto kódov. Preto budeme schopní vizualizovať interakciu medzi našim novovytvoreným klientom a serverom. Na dosiahnutie tohto cieľa musíme spustiť dva rôzne terminály, pretože máme prevádzkovať dva samostatné programy. Jeden terminál bude určený na spustenie kódu na strane servera a druhý na kód na strane klienta.
Takže pri zostavovaní nášho kódu na strane servera vykonáme v prvom termináli nasledujúci príkaz:
$ gcc server.c -o serverAk po spustení tohto príkazu nebudú v kóde na strane servera žiadne chyby, na termináli sa nezobrazí nič, čo bude indikáciou úspešnej kompilácie.
Rovnakým spôsobom zostavíme kód na strane klienta pomocou nižšie uvedeného príkazu jeho spustením v druhom termináli:
$ gcc klient.c -o klient
Po zostavení oboch kódov ich spustíme jeden po druhom. Najprv však musíme spustiť kód na strane servera, pretože má načúvať požiadavkám na pripojenie. Kód na strane servera je možné spustiť pomocou nasledujúceho príkazu:
$ ./ server
Po spustení kódu na strane servera môžeme spustiť kód na strane klienta pomocou príkazu uvedeného nižšie:
$ ./zákazník
Akonáhle bude klient aj server funkčný, budete svedkami výstupov zobrazených na nasledujúcich obrázkoch na oboch termináloch:
Záver
Dúfajme, že po absolvovaní príkladu zdieľaného s vami v tomto článku budete môcť efektívne používať zásuvky POSIX na odosielanie a prijímanie údajov medzi klientom a serverom. Tento príklad je iba základnou ukážkou zásuviek Posix s programovaním v jazyku C, môžete ich však podľa svojich požiadaviek ešte vylepšiť.