C programavimas

POSIX lizdas su C programavimu

POSIX lizdas su C programavimu

„POSIX“ lizdas arba tiesiog „Socket“ yra apibrėžtas kaip ryšio galinis taškas. Pavyzdžiui, jei dvi šalys - A ir B - ketina bendrauti tarpusavyje, reikės, kad abi šios šalys užmegztų ryšį tarp savo atitinkamų galinių taškų. Lizdas suteikia bendraujantiems šalims vartus, per kuriuos keliauja pranešimai. Jei kalbėsime apie klientą ir serverį, tada serverio pusės lizdo užduotis bus išklausyti gaunamus ryšius, o kliento pusės bus atsakinga už prisijungimą prie serverio pusės. Šis straipsnis skirtas daug aiškiau išdėstyti „POSIX“ lizdo su C programavimu koncepciją.

„Posix Socket“ su „C“ programavimo „Linux Mint 20“ pavyzdys

Šiame skyriuje pateiktas pavyzdys parodys kliento ir serverio sąveiką. Klientas ir serveris yra du pagrindiniai kliento / serverio modelio subjektai skaičiavimo pasaulyje. Mūsų pavyzdyje klientas ir serveris siųs ir priims pranešimus vieni iš kitų ir naudodamiesi „Linux Mint 20“ naudodami „POSIX Socket“ su C programavimu. Siekdami aiškumo suprantant kodą, atskyrėme kliento ir serverio kodus ir toliau juos abu paaiškinsime atskirai.

Serverio pusės kodas

Serverio kodui paprasčiausiai sukūrėme tuščią dokumentą „Linux Mint 20“ sistemos namų kataloge ir pavadinome jį serveriu.c. Tame tuščiame dokumente turite parašyti kodo fragmentus, rodomus trijuose toliau pateiktuose vaizduose:

Aukščiau pateiktuose paveikslėliuose rodomas kodas gali atrodyti ilgas, tačiau pabandykime jį suprasti labai lengvai. Visų pirma, mes sukūrėme lizdą ir prijungėme jį su norimu prievado numeriu, kuris mūsų atveju yra 8080. Tada mes parašėme klausymo funkciją, kuri yra skirta ieškoti visų įeinančių klientų ryšių. Iš esmės klientas sugeba prisijungti prie serverio tik dėl šios klausymo funkcijos. Kai šis ryšys bus užmegztas, serveris bus nustatytas siųsti ir gauti duomenis klientui ir iš jo.

Skaitymo ir siuntimo funkcijos yra skirtos atitinkamai gauti ir siųsti pranešimus klientams. Mes jau apibrėžėme numatytąjį pranešimą savo kode, kurį ketiname išsiųsti savo klientui, tai yra „Sveiki iš serverio“. Išsiuntus šį pranešimą klientui, jis bus rodomas kliento pusėje, o pranešimas „Sveiki, išsiųstas pranešimas“ bus rodomas serverio pusėje. Tai viskas apie mūsų serverio kodą.

Kliento pusės kodas

Dabar, norėdami gauti kliento kodą, vėl sukūrėme tuščią dokumentą „Linux Mint 20“ sistemos namų kataloge ir pavadinome jį klientu.c. Tame tuščiame dokumente turite parašyti kodo fragmentus, rodomus dviejuose toliau pateiktuose vaizduose:

Aukščiau esančiuose paveikslėliuose parodytame kliento pusės kode mes sukūrėme lizdą tokiu pačiu būdu, kaip ir serverio kodui. Tada yra prisijungimo funkcija, kuri bandys užmegzti ryšį su serveriu per nurodytą prievadą. Kai serveris priims šį ryšį, klientas ir serveris bus pasirengę siųsti ir gauti pranešimus vienas kitam ir vienas iš kito.

Vėlgi, kaip ir serverio pusės kodas, siuntimo ir skaitymo funkcijos yra skirtos atitinkamai siųsti ir gauti pranešimus iš serverio. Taip pat paminėjome numatytąjį pranešimą, kurį norime nusiųsti į serverį, tai yra „Sveiki iš kliento“. Išsiuntus šį pranešimą į serverį, šis pranešimas bus rodomas serverio pusėje, o kliento pusėje - pranešimas „Sveiki išsiųsti“. Ir tai baigia mūsų kliento kodo paaiškinimo pabaigą.

Kliento ir serverio pusės kodų sudarymas ir vykdymas

Akivaizdu, kad parašę šias programas išsaugosime ir kliento, ir serverio failus, tada visi būsime pasirengę kompiliuoti ir paleisti šiuos kodus. Taigi galėsime vizualizuoti naujai sukurto kliento ir serverio sąveiką. Norėdami pasiekti šį tikslą, turime paleisti du skirtingus terminalus, nes mes turėtume paleisti dvi atskiras programas. Vienas terminalas bus skirtas serverio kodui paleisti, o kitas - kliento kodui.

Taigi, norėdami sudaryti serverio kodą, mes vykdysime šią komandą pirmajame terminale:

$ gcc serveris.c -o serveris

Paleidus šią komandą, jei jūsų serverio kode nebus klaidų, nieko nebus rodoma terminale, o tai bus sėkmingo kompiliavimo požymis.

Tokiu pačiu būdu sukompiliuosime kliento pusės kodą su žemiau parodyta komanda paleidę jį antrame terminale:

$ gcc klientas.c -o klientas

Kai abu kodai bus sukompiliuoti, juos vykdysime po vieną. Tačiau pirmiausia turime paleisti serverio kodą, nes jis turėtų klausytis ryšio užklausų. Serverio pusės kodą galima paleisti naudojant šią komandą:

$ ./ serveris

Paleidę serverio kodą, galime paleisti kliento kodą naudodami toliau nurodytą komandą:

$ ./ klientas

Kai klientas ir serveris veiks ir veiks, jūs matysite šių vaizdų rezultatus iš abiejų terminalų:

Išvada

Tikimės, kad perėję šiame straipsnyje su jumis bendrinamą pavyzdį, galėsite efektyviai naudoti „POSIX Sockets“ duomenims siųsti ir gauti iš kliento ir serverio. Šis pavyzdys yra tik pagrindinis „Posix“ lizdų su C programavimu demonstravimas, tačiau jūs netgi galite padaryti šias programas sudėtingesnes pagal savo reikalavimus.

Geriausi „Linux“ komandinės eilutės žaidimai
Komandų eilutė yra ne tik jūsų didžiausias sąjungininkas naudojant „Linux“, bet ir pramogų šaltinis, nes ją galite naudoti norėdami žaisti daug įdomių...
Geriausios „Linux“ skirtos „Gamepad“ žemėlapių sudarymo programos
Jei jums patinka žaisti žaidimus „Linux“ su žaidimų pultu, o ne įprasta klaviatūra ir pelės įvesties sistema, yra keletas jums naudingų programų. Daug...
Naudingi įrankiai „Linux“ žaidėjams
Jei jums patinka žaisti žaidimus „Linux“ sistemoje, yra tikimybė, kad galbūt naudojote tokias programas ir įrankius kaip „Wine“, „Lutris“ ir „OBS Stud...