Вступ до програмування сокетів в 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 з реалізацією коду. Ви також можете переглянути наступні статті, щоб дізнатися більше -
- Вкладені петлі Python
- Топ-15 особливостей Python
- Топ 7 Python IDE для Windows
- Різні методи в наборах Python