Вступ до програмування сокетів в Python

У програмуванні розетки зв'язок встановлюється через мережу між двома сокетами (вузлами). Сервер виконує функцію порту слухача, який прослуховує певний IP, а клієнтський сокет доходить до серверного сокета для зв'язку. Для роботи в програмуванні сокетів нам доведеться імпортувати бібліотеку сокет, яку надає python.

Сервер сокетів Python

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

Протокол управління передачею (TCP) - це обраний за замовчуванням протокол. TCP надійний, оскільки відправник виявляє та передає пакети, які випадають у мережу. TCP також забезпечує доставку даних на замовлення, тобто порядок, в якому він надсилається відправником у аналогічному порядку, він читається додатком.

server.py

Подивіться програму нижче: server.py

Рядок 3: Socket - це попередньо встановлена ​​бібліотека і для цього буде створений об’єкт. Цей модуль сокета імпортується в програму python, і він буде використовуватися як функція сокета пізніше в програмі. Ми створюємо тут об’єкт, який буде викликати функцію socket.

Рядок 4: socket.AF_INET відповідає IPV4 (Якщо хочеться використовувати IPV6, тоді може використовуватися socket.AF_INET6. Це стосується сімейства сокетів. AF_INET вказує протокол, який буде використовуватися для зв'язку. IPV4 та IPV6 - це різні управління передачею способи або протоколи передачі даних по мережі.

IPV4 та IPV6 - це лише різні типи IP-адрес. Socket.AF_INET відповідає TCP. Протокол управління передачею (TCP) працює з IP та визначає, як комп'ютер передає пакети даних один одному.

Далі потрібен TCP, для цього нам знадобиться сокет.SOCK_STREAM, який є типом сокета. TCP - протокол, орієнтований на з'єднання, по суті включає здійснення тристороннього з'єднання рукостисканням з сервером і клієнтом. Тоді ми надаємо ім'я хоста, де клієнт підключиться.

Рядок 5: Для імені хоста можна використовувати "localhost" або "127.0.01" або socket.gethostname () будь-яке з них. Він отримує IP-адресу сервера.

Вище наведені два параметри, які ми визначаємо для сокета.

Рядок 6: У нас зазвичай багато портів у нашій системі, тому нам потрібно скористатися не використовуваним портом хоста. Будь-який чотиризначний можна використовувати, оскільки в основному зайняті нижні цифри.

Рядок 7: метод bind (), який прив'язує хост і порт до сокета.

Всі ці кроки необхідні для запуску нашого сервера. Тепер нам потрібно зробити клієнта. Як було сказано раніше, у нас може бути декілька клієнтів.

Рядок 8: У нас є можливість зазначити номер клієнта, який може взаємодіяти з сервером. Цього досягається за допомогою s.listen (6). Він запускає слухач TCP. Числове число представляє кількість клієнтів, які можуть взаємодіяти. Якщо, наприклад, приходить 7- й клієнт, він буде відкинутий.

Рядок 9: s.accept () прийме запит від клієнта, і він поверне два об'єкти, один - об'єкт socket-client, а другий - адреса. IP-адреса буде адресою клієнта, де присутній наш клієнт.

Рядок 10: Це більше нагадує сповіщення серверу про встановлене з'єднання.

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

Клієнт Python Socket

Тут ми обговоримо про клієнт сокет-пітона:

client.py

Ось наша програма для клієнта: client.py

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

Рядок 8: У серверній програмі є метод прив'язки (), тут буде використаний метод connect (). Цей кортеж буде приймати хост і порт у методі. Ми беремо той самий порт, який ми використовували в нашому server.py

Нам потрібно запустити server.py та client.py в різних терміналах, і саме так ми побачимо, як відбувається з'єднання.

Вихід:

Скріншот зроблений з двох різних терміналів, один відкритий у CMD, а другий відкритий у PowerShell в Windows. Ліве вікно відкриває програму server.py, а термінал праворуч відкриває програму client.py.

Ми бачимо вихід, надрукований у терміналі на стороні сервера.

Надсилання рядка з одного файлу в інший файл

Ми спробуємо надіслати повідомлення з боку клієнта на сторону сервера. Ми пишемо повідомлення в програмі client.py.

1. client.py

Ось наша програма для клієнта: client.py

Рядок 9 та рядок 10: Встановлюємо повідомлення у змінну та надсилаємо повідомлення у вигляді байтів та конвертуємо його чи кодуємо у форматі UTF-8. (UTF - це стандарт Unicode, оскільки весь вміст повідомлення є символами, і вони потрапляють під діаграму Unicode)

Рядок 11: Ми закриваємо з'єднання.

У серверній програмі ми внесемо наступні зміни.

2. server.py

Ось наша програма для сервера: server.py

Рядок 11: Для того щоб побудувати з'єднання, ми використовуємо об’єкт клієнтського сокета. Ми згадуємо розмір буфера, додаючи до методу 1024 байти (1 Кб), і ми зберігаємо в повідомленні змінної.

Рядок 13: Потім ми друкуємо метод.

Вихід:

Ми знову відкриваємо обидва термінали і бачимо наступний вихід.

Висновок - Програмування сокетів в Python

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

Рекомендовані статті

Це посібник із програмування сокетів у Python. Тут ми обговорюємо концепцію сервера сокетів python та клієнта сокета python з реалізацією коду. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Вкладені петлі Python
  2. Топ-15 особливостей Python
  3. Топ 7 Python IDE для Windows
  4. Різні методи в наборах Python