C Програмиране

POSIX гнездо с програмиране на C

POSIX гнездо с програмиране на C

POSIX Socket или просто Socket се дефинира като комуникационна крайна точка. Например, ако две страни, A и B, възнамеряват да комуникират помежду си, тогава ще се изисква и двете страни да установят връзка между съответните си крайни точки. Сокет осигурява на комуникиращите страни шлюз, през който съобщенията пътуват. Ако говорим от гледна точка на клиента и сървъра, тогава работата на сокета от страна на сървъра ще бъде да слуша входящите връзки, докато сокетът от страна на клиента ще отговаря за свързването към сокета от страна на сървъра. Тази статия има за цел да направи концепцията за POSIX сокет с програмиране на C много по-ясна.

Пример за използване на Posix Socket с програмиране на C в Linux Mint 20

Примерът, представен ви в този раздел, ще демонстрира взаимодействие между клиент и сървър. Клиентът и сървърът са двете основни обекти на модела клиент / сървър в света на изчисленията. В нашия пример и клиентът, и сървърът ще изпращат и получават съобщения един от друг, докато използват POSIX сокета с програмиране C в Linux Mint 20. За да внесем яснота в разбирането на кода, ние сме отделили кода от страна на клиента и кода от страна на сървъра и по-долу ще ви обясним поотделно.

Кодът от страна на сървъра

За кода от страна на сървъра просто създадохме празен документ в началната директория на нашата Linux Mint 20 система и го нарекохме сървър.° С. В този празен документ трябва да напишете кодовите фрагменти, показани на трите изображения по-долу:

Кодът, показан на изображенията по-горе, може да изглежда дълъг, но нека се опитаме да го разберем по изключително лесен начин. На първо място, създадохме сокет и го прикачихме с желания номер на порт, който в нашия случай е 8080. След това сме написали функция за слушане, която е там, за да търси всички входящи връзки от клиентите. По принцип клиентът успява да се свърже със сървъра само поради наличието на тази функция за слушане. И след като тази връзка бъде установена, сървърът е настроен да изпраща и получава данни от и от клиента.

Функциите за четене и изпращане служат съответно за получаване и изпращане на съобщения до клиентите. Вече сме дефинирали съобщение по подразбиране в нашия код, което възнамеряваме да изпратим на клиента си, и това е „Здравейте от сървъра“. След изпращане на това съобщение до клиента, то ще се покаже на страната на клиента, докато съобщение с надпис „Hello message sent“ ще се покаже на страната на сървъра. Това е всичко за нашия сървърен код.

Кодът от страна на клиента

Сега за клиентския код отново създадохме празен документ в домашната директория на нашата Linux Mint 20 система и го нарекохме клиент.° С. В този празен документ трябва да напишете кодовите фрагменти, показани на двете изображения по-долу:

В клиентския код, показан на изображенията по-горе, ние създадохме сокет по същия начин, както направихме за кода от страна на сървъра. След това има функция за свързване, която ще се опита да осъществи връзка със сървъра чрез посочения порт. И след като тази връзка бъде приета от сървъра, клиентът и сървърът ще бъдат настроени да изпращат и получават съобщения един от друг.

Отново, точно както кода от страна на сървъра, функциите за изпращане и четене са там, за да изпращат и получават съобщения от сървъра, съответно. Също така споменахме съобщение по подразбиране, което искаме да изпратим на сървъра, и което е „Здравейте от клиента“. След изпращане на това съобщение до сървъра, това съобщение ще се покаже от страната на сървъра, докато съобщение „Hello message sent“ ще се покаже от страната на клиента. И това ни води до края на обяснението на нашия клиентски код.

Компилиране и стартиране на клиентски и сървърни кодове

Очевидно ще запазим както нашите клиентски, така и сървърни файлове, след като напишем тези програми, след което ще бъдем готови да компилираме и стартираме тези кодове. Следователно ще можем да визуализираме взаимодействието между нашия новосъздаден клиент и сървър. За да постигнем тази цел, трябва да пуснем два различни терминала, тъй като трябва да стартираме две отделни програми. Единият терминал ще бъде предназначен за стартиране на кода от страна на сървъра, а другият - за кода от страна на клиента.

Така че, за компилиране на нашия сървърен код, ние ще изпълним следната команда в първия терминал:

$ gcc сървър.c -o сървър

След изпълнението на тази команда, ако няма грешки в сървърния ви код, тогава нищо няма да се покаже на терминала, което ще бъде индикация за успешна компилация.

По същия начин ще компилираме клиентския код с командата, показана по-долу, като го изпълним във втория терминал:

$ gcc клиент.c -o клиент

След като и двата кода бъдат компилирани, ще ги стартираме един по един. Трябва обаче първо да стартираме кода от страна на сървъра, тъй като той трябва да слуша заявките за свързване. Кодът от страна на сървъра може да се изпълни със следната команда:

$ ./ сървър

След като стартираме кода от страна на сървъра, можем да стартираме кода от страна на клиента с командата, показана по-долу:

$ ./ клиент

След като клиентът и сървърът станат готови и стартират, ще станете свидетели на изходите, показани на следните изображения на двата терминала:

Заключение

Надяваме се, след като преминете през примера, споделен с вас в тази статия, ще можете да използвате POSIX сокетите ефективно за изпращане и получаване на данни между клиент и сървър. Този пример е само основна демонстрация на гнездата Posix с програмиране на C, но дори можете да направите тези програми по-сложни според вашите изисквания.

Най-добрите приложения за картографиране на геймпад за Linux
Ако искате да играете игри на Linux с геймпад вместо типична система за въвеждане на клавиатура и мишка, има някои полезни приложения за вас. Много ко...
Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...
HD Remastered Games за Linux, които никога преди не са имали издание на Linux
Много разработчици и издатели на игри излизат с HD ремастер на стари игри, за да удължат живота на франчайза, моля феновете, които искат съвместимост ...