C programozás

POSIX Socket C programozással

POSIX Socket C programozással

A POSIX vagy egyszerűen egy Socket kommunikációs végpontként definiálható. Például, ha két fél, A és B szándékozik kommunikálni egymással, akkor meg kell követelni, hogy mindkét fél kapcsolatot létesítsen a saját végpontjai között. Egy aljzat biztosítja a kommunikáló felek számára az átjárót, amelyen keresztül az üzenetek továbbjutnak. Ha kliensről és szerverről beszélünk, akkor a kiszolgálóoldali socket feladata a bejövő kapcsolatok meghallgatása, míg a kliensoldali socket felelős a szerveroldali socketbe való csatlakozásért. A cikk célja, hogy a C programozással ellátott POSIX socket koncepcióját sokkal világosabbá tegye.

Példa a Posix Socket C programozással történő használatára a Linux Mint 20 alkalmazásban

Az ebben a szakaszban bemutatott példa bemutatja az ügyfél és a szerver közötti kölcsönhatást. Az ügyfél és a kiszolgáló a kliens / szerver modell két fő entitása a számítástechnika világában. Példánkban mind az ügyfél, mind a szerver üzeneteket fog küldeni és fogadni egymásnak, illetve a Linux Mint 20 programozású C programozással ellátott POSIX Socket használatával. A kód megértésének tisztázása érdekében elkülönítettük az ügyféloldali kódot és a szerveroldali kódot, és az alábbiakban mindkettőt külön megmagyarázzuk Önnek.

A kiszolgálóoldali kód

A kiszolgálóoldali kódhoz egyszerűen létrehoztunk egy üres dokumentumot a Linux Mint 20 rendszerünk házkönyvtárában, és elneveztük szervernek.c. Az üres dokumentumba be kell írnia az alábbi három képen látható kódrészleteket:

A fenti képeken látható kód hosszúnak tűnhet, próbáljuk azonban rendkívül egyszerűen megérteni. Először is létrehoztunk egy foglalatot és csatoltuk a kívánt portszámmal, ami esetünkben 8080. Ezután írtunk egy figyelés funkciót, amely arra szolgál, hogy megkeresse az összes bejövő kapcsolatot az ügyfelektől. Alapvetően az ügyfélnek csak a figyelés funkció jelenléte miatt sikerül csatlakoznia a szerverhez. És miután ez a kapcsolat létrejött, a szerver készen áll arra, hogy adatokat küldjön és fogadjon az ügyfélnek és az ügyféltől.

Az olvasási és küldési funkciók az ügyfeleknek szóló üzenetek fogadásának és küldésének céljait szolgálják. A kódunkban már definiáltunk egy alapértelmezett üzenetet, amelyet el akarunk küldeni az ügyfelünknek, ez a „Hello from server”. Miután elküldte ezt az üzenetet az ügyfélnek, az az ügyfél oldalán jelenik meg, míg a „Hello üzenet elküldve” üzenet jelenik meg a szerver oldalán. Ez a szerveroldali kódunkról szól.

Az ügyféloldali kód

Most, az ügyféloldali kódhoz, megint létrehoztunk egy üres dokumentumot a Linux Mint 20 rendszerünk házkönyvtárában, és elneveztük kliensnek.c. Ebben az üres dokumentumban meg kell írnia az alábbi két képen látható kódrészleteket:

A fenti képeken látható kliensoldali kódban létrehoztunk egy foglalatot ugyanúgy, mint a szerveroldali kódnál. Ezután van egy kapcsolódási funkció, amely megpróbálja kapcsolatot létesíteni a szerverrel a megadott porton keresztül. És miután a kiszolgáló elfogadta ezt a kapcsolatot, az ügyfél és a kiszolgáló készen áll arra, hogy üzeneteket küldjenek és fogadjanak egymásnak és egymástól.

Ismét, csakúgy, mint a szerveroldali kód, a küldés és az olvasás funkciók is üzenetek küldésére és fogadására szolgálnak a szerverrõl. Emellett megemlítettünk egy alapértelmezett üzenetet, amelyet el akarunk küldeni a szervernek, ez a következő: “Hello from client”. Miután elküldte ezt az üzenetet a szerverre, ez az üzenet a szerver oldalán jelenik meg, míg az ügyfél oldalán a „Hello üzenet elküldve” üzenet jelenik meg. És ezzel eljutunk az ügyféloldali kód magyarázatának végéhez.

Az ügyfél- és kiszolgálóoldali kódok fordítása és futtatása

Nyilvánvaló, hogy mind a kliens-, mind a szerveroldali fájljainkat mentjük, miután megírtuk ezeket a programokat, majd készen állunk a kódok fordítására és futtatására. Így képesek leszünk megjeleníteni az újonnan létrehozott kliens és szerver közötti kölcsönhatást. E cél elérése érdekében két különböző terminált kell elindítanunk, mivel két külön programot kell futtatnunk. Az egyik terminált a kiszolgálóoldali kód futtatására fogják szánni, a másikat az ügyféloldali kód futtatására.

Tehát a kiszolgálóoldali kód összeállításához a következő parancsot hajtjuk végre az első terminálban:

$ gcc szerver.c -o szerver

A parancs futtatása után, ha nem lesz hiba a szerveroldali kódban, akkor semmi sem jelenik meg a terminálon, ami a sikeres fordítás jele lesz.

Ugyanígy lefordítjuk az ügyféloldali kódot az alább látható paranccsal, futtatva azt a második terminálon:

$ gcc kliens.c -o kliens

Miután mindkét kód összeállt, egyenként futtatjuk őket. Először azonban a szerveroldali kódot kell futtatnunk, mivel állítólag meghallgatja a csatlakozási kéréseket. A kiszolgálóoldali kód a következő paranccsal futtatható:

$ ./szerver

A kiszolgálóoldali kód futtatása után az alábbi paranccsal futtathatjuk az ügyféloldali kódot:

$ ./ügyfél

Miután mind az ügyfél, mind a szerver beindult, akkor a következő képeken látható kimenetek láthatók mindkét terminálon:

Következtetés

Remélhetőleg, miután áttekintette a cikkben megosztott példát, hatékonyan tudja használni a POSIX Socketeket az adatok küldésére és fogadására az ügyfél és a szerver között. Ez a példa csak a C programozással ellátott Posix foglalatok alapvető bemutatója, azonban ezeket a programokat akár összetettebbé is teheti az Ön igényei szerint.

Csata a Wesnothért 1.13.6 Megjelent a fejlesztés
Csata a Wesnothért 1.13.A múlt hónapban megjelent 6 a hatodik fejlesztési kiadás az 1-ben.13.x sorozat, és számos fejlesztést hajt végre, nevezetesen ...
A League of Legends telepítése az Ubuntu 14-re.04
Ha rajongsz a League of Legendsért, akkor ez egy lehetőség arra, hogy teszteld a League of Legends játékot. Ne feledje, hogy a LOL a PlayOnLinux rends...
Telepítse a legújabb OpenRA stratégiai játékot az Ubuntu Linux rendszerre
Az OpenRA egy ingyenes / ingyenes valós idejű stratégiai játékmotor, amely újjáépíti a korai Westwood játékokat, mint például a klasszikus Command & C...