C Програмування

Розетка POSIX із програмуванням на C

Розетка POSIX із програмуванням на C

Сокет POSIX або просто сокет визначається як кінцева точка зв'язку. Наприклад, якщо дві сторони, А і В, мають намір спілкуватися між собою, тоді обом цим сторонам потрібно буде встановити зв'язок між відповідними кінцевими точками. Сокет забезпечує сторонам, що спілкуються, шлюз, через який проходять повідомлення. Якщо говорити з точки зору клієнта та сервера, то завданням серверного сокета буде прослуховування вхідних з'єднань, тоді як клієнтський сокет буде відповідати за підключення до серверного сокета. Ця стаття покликана набагато чіткіше зрозуміти концепцію сокета POSIX із програмуванням на C.

Приклад використання сокета Posix з програмуванням на C в Linux Mint 20

Приклад, представлений вам у цьому розділі, продемонструє взаємодію між клієнтом та сервером. Клієнт і сервер - дві основні сутності моделі клієнт / сервер у світі обчислень. У нашому прикладі і клієнт, і сервер надсилатимуть та отримуватимуть повідомлення одне до одного та від них, використовуючи сокет POSIX із програмуванням на C в Linux Mint 20. Для ясності розуміння коду ми розділили код на стороні клієнта та код на стороні сервера, і нижче ми окремо пояснимо їх обом.

Код на стороні сервера

Для коду на стороні сервера ми просто створили порожній документ у домашньому каталозі нашої системи Linux Mint 20 і назвали його сервером.c. У цьому порожньому документі вам потрібно написати фрагменти коду, показані на трьох зображеннях нижче:

Код, показаний на зображеннях вище, може здатися довгим, однак, спробуємо зрозуміти його надзвичайно просто. Перш за все, ми створили сокет і прикріпили його до потрібного номера порту, який у нашому випадку становить 8080. Потім ми написали функцію прослуховування, яка є там, щоб шукати всі вхідні з'єднання від клієнтів. В основному, клієнту вдається підключитися до сервера лише через наявність цієї функції прослуховування. І після встановлення цього з’єднання сервер налаштований на надсилання та отримання даних від і до клієнта.

Функції читання та надсилання служать для отримання та надсилання повідомлень клієнтам відповідно. Ми вже визначили в коді повідомлення за замовчуванням, яке ми маємо намір надіслати нашому клієнту, а саме: "Привіт із сервера". Після надсилання цього повідомлення клієнту воно відображатиметься на стороні клієнта, тоді як на стороні сервера відображатиметься повідомлення "Hello message sent". Це все про наш серверний код.

Код на стороні клієнта

Тепер для коду на стороні клієнта, знову ж таки, ми створили порожній документ у Домашньому каталозі нашої системи Linux Mint 20 і назвали його client.c. У цьому порожньому документі потрібно написати фрагменти коду, показані на двох зображеннях нижче:

У коді на стороні клієнта, показаному на зображеннях вище, ми створили сокет так само, як і для коду на стороні сервера. Потім є функція підключення, яка намагатиметься встановити зв’язок із сервером через вказаний порт. І як тільки це з'єднання буде прийнято сервером, клієнт і сервер будуть готові надсилати та отримувати повідомлення одне одному та від них.

Знову ж, як і серверний код, функції надсилання та зчитування існують для надсилання та отримання повідомлень із сервера відповідно. Крім того, ми згадали повідомлення за замовчуванням, яке ми хочемо надіслати на сервер, а саме "Привіт від клієнта". Після відправки цього повідомлення на сервер це повідомлення відображатиметься на стороні сервера, тоді як повідомлення "Hello message sent" відображатиметься на стороні клієнта. І це підводить нас до кінця пояснення нашого коду на стороні клієнта.

Компіляція та запуск клієнтського та серверного кодів

Очевидно, що після збереження цих програм ми будемо зберігати як файли на стороні клієнта, так і на стороні сервера, тоді ми будемо готові компілювати та запускати ці коди. Отже, ми зможемо візуалізувати взаємодію між новим клієнтом та сервером. Для досягнення цієї мети ми повинні запустити два різних термінали, оскільки ми повинні запускати дві окремі програми. Один термінал буде призначений для запуску коду на стороні сервера, а інший - для коду на стороні клієнта.

Отже, для компіляції коду на стороні сервера ми виконаємо таку команду в першому терміналі:

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

Після запуску цієї команди, якщо в коді на стороні сервера не буде помилок, тоді на терміналі нічого не відображатиметься, що буде свідченням успішної компіляції.

Таким же чином ми скомпілюємо код на стороні клієнта за допомогою команди, показаної нижче, запустивши його у другому терміналі:

$ gcc клієнт.c -o клієнт

Після того, як обидва коди скомпільовані, ми будемо запускати їх по одному. Однак спочатку потрібно запустити серверний код, оскільки він повинен прослуховувати запити на підключення. Код на стороні сервера можна запустити за допомогою наступної команди:

$ ./ сервер

Після запуску коду на стороні сервера ми можемо запустити код на стороні клієнта за допомогою команди, показаної нижче:

$ ./ клієнт

Після того, як і клієнт, і сервер запрацюють, ви побачите результати, показані на наступних зображеннях на обох терміналах:

Висновок

Сподіваємось, переглянувши приклад, наведений у цій статті, ви зможете ефективно використовувати розетки POSIX для надсилання та отримання даних між клієнтом та сервером. Цей приклад - лише базова демонстрація сокетів Posix із програмуванням на С, однак ви навіть можете зробити ці програми більш складними відповідно до ваших вимог.

Найкращі лабораторні ігри Oculus App
Якщо ви є власником гарнітури Oculus, то вам потрібно дізнатися про бокове завантаження. Бокове завантаження - це процес встановлення негарнітного вмі...
Top 10 Games to Play on Ubuntu
Windows platform has been one of the dominating platforms for gaming because of the huge percentage of games that are developing today to natively sup...
5 найкращих аркадних ігор для Linux
В наш час комп’ютери - це серйозні машини, що використовуються для ігор. Якщо ви не можете отримати новий високий бал, ви зрозумієте, що я маю на уваз...