Очікування:
Ось кілька ключових моментів, про які можна дізнатися з цієї статті
- Надсилання тексту за допомогою програми python, яка використовує протокол UDP.
- Отримання тексту за допомогою програми python, яка використовує протокол UDP.
- Перевірте пакет UDP у Wireshark.
- Дізнайтеся про код python для надсилання та отримання UDP-пакетів.
Загальна схема налаштування:
Системи A і B повинні мати можливість пінгувати один одного.
Припущення або обмеження:
- В обох системах має бути Linux з Ubuntu. Код може працювати або не працювати в інших операційних системах, таких як Windows10, MAC тощо.
- Обидві системи повинні мати версію python 3. Цей код може працювати, а може і не працювати на python 2.7 версія.
Примітка: Ви можете перевірити посилання на тестування надсилання та отримання пакетів UDP через Linux CLI, перш ніж виконувати те саме завдання для файлів python.
Файли Python:
Є два файли python сервер.py і клієнт.py. файл сервера та файл клієнта повинні бути присутніми в системі сервера та системі клієнта відповідно.
Сервер.py
імпорт сокетімпортувати sys
якщо len (sys.argv) == 3:
# Отримайте "IP-адресу сервера", а також "номер порту" від
аргумент 1 та аргумент 2
ip = sys.argv [1]
port = int (sys.argv [2])
ще:
print ("Запустити як: сервер python3.py
вихід (1)
# Створіть сокет UDP
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM)
# Прив’яжіть сокет до порту
server_address = (ip, порт)
s.прив'язка (адреса_сервера)
print ("Для виходу з програми натисніть Ctrl + c !!")
Правда:
print ("####### Сервер прослуховує #######")
дані, адреса = s.відшкодування (4096)
print ("\ n \ n 2. Сервер отримав: ", дані.декодувати ('utf-8'), "\ n \ n")
send_data = input ("Введіть текст для надсилання =>")
s.sendto (send_data.encode ('utf-8'), адреса)
print ("\ n \ n 1. Сервер надіслано: ", send_data," \ n \ n ")
Клієнт.py
імпорт сокетімпортувати sys
якщо len (sys.argv) == 3:
# Отримайте "IP-адресу сервера", а також "номер порту" з аргументу 1 та аргументу 2
ip = sys.argv [1]
port = int (sys.argv [2])
ще:
print ("Запустити як: клієнт python3.py
вихід (1)
# Створити сокет для сервера
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM, 0)
print ("Для виходу з програми натисніть Ctrl + c !!")
# Давайте надсилатимемо дані за протоколом UDP
Правда:
send_data = input ("Введіть текст для надсилання =>");
s.sendto (send_data.кодувати ('utf-8'), (ip, порт))
print ("\ n \ n 1. Клієнт відправлений: ", send_data," \ n \ n ")
дані, адреса = s.відшкодування (4096)
print ("\ n \ n 2. Клієнт отримав: ", дані.декодувати ('utf-8'), "\ n \ n")
# закрийте розетку
s.закрити ()
Надсилання / отримання пакету UDP:
Візьмемо приклад, як-от ми надішлемо UDP-пакет із системи A в систему B. Отже, у концепції сервер-клієнт ми повинні запускати сервер на стороні системи B, а клієнт на стороні системи A.
Також у нас є дійсні IP-адреси.
Система A IP: 192.168.1.6IP-адреса системи B: 192.168.1.102
Зараз, на відміну від надсилання та отримання пакетів UDP через Linux CLI, ми будемо запускати сервер.py у системі, В [192.168.1.102], а потім ми будемо бігати клієнт.py в системі A [192.168.1.6].
Як запустити сервер.py в 192.168.1.102?
Ось команда для запуску сервера.py
$ python3 сервер.py 192.168.1.102 4444Ось скріншот
Тут є два аргументи для програми python. 1вул аргумент - це IP-адреса самого сервера, тут його 192.168.1.102 та 2й аргументом є порт, який сервер буде слухати, тут ми вибрали 4444.
Як запустити клієнта.py в 192.168.1.6?
Ось команда для запуску клієнта.py
Клієнт $ python3.py 192.168.1.102 4444Ось скріншот
Тут є два аргументи для програми python. 1вул аргумент - це IP-адреса сервера, тут його 192.168.1.102 та 2й аргумент - це порт, де працює сервер. Для нашого прикладу це 4444.
Надішліть або отримайте текст:
Тепер, як ви бачите, ми готові до спілкування між двома системами. Але нам слід починати спочатку з клієнта. Давайте наберемо щось у клієнті і подивимося, доходить воно до сервера чи ні.
Надіслати дані від клієнта: “Я від Клієнта”
Клієнт форми знімка екрана:
Тепер це повідомлення клієнта має надійти на сервер. Ось знімок екрана сервера.
Тепер ми бачимо на стороні сервера, і у нас є можливість надіслати щось клієнту. Давайте спробуємо це.
Надіслати дані від клієнта: “Я з сервера”
Знімок екрана сервера:
І ось скріншот на стороні клієнта.
Тепер це триватиме нескінченно багато разів, поки ми не зупинимо програму python за допомогою Ctrl + c.
Перевірте пакет UDP у Wireshark:
Зараз ми налагодили певний зв’язок, але звідки ми дізнаємось, що UDP використовувався для надсилання або отримання цих пакетів. Отже, ми можемо перевірити зйомку в Wireshark.
Давайте побачимо пакет, коли клієнт [192.168.1.6] надіслав дані [“Я від клієнта”] на сервер [192.168.1.6].
Пояснення коду:
Пояснення щодо основного коду python наведено у розділі «Передача файлів передачі файлів сокета Python» у розділі довідки.
Ми пояснимо лише важливі коди рядків для файлу клієнта та сервера python. У коді клієнта та сервера є корисні коментарі.
Пояснення коду клієнта:
якщо len (sys.argv) == 3:Вищевказаний рядок потрібно перевірити, чи передав користувач обов’язкові обов’язкові аргументи. Або програма вийде. Така сама перевірка є і в серверній програмі.
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM, 0)Наведений вище рядок - створити сервер сокетів з UDP [SOCK_DGRAM] протоколу. Той самий код є на сервері.py.
Правда:Запускати програму в нескінченному циклі, поки користувач не зробить Ctrl + c. Той самий код є на сервері.py.
s.sendto (send_data.кодувати ('utf-8'), (ip, порт))Надіслати дані для згаданих ip і порт номер.
дані, адреса = s.відшкодування (4096)Для отримання будь-яких даних, що надходять з сервера. Той самий код є на сервері.py.
Пояснення коду сервера:
s.sendto (send_data.encode ('utf-8'), адреса)Надішліть дані на адресу клієнта.
Висновок:
Ми можемо надсилати або отримувати дані UDP за допомогою програми python. Внутрішньо він використовує клієнтський механізм сервера.
Список літератури:
Щоб зрозуміти TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Щоб зрозуміти UDP: https: // linuxhint.com / udp_wireshark_analysis /
Надсилання та отримання UDP-пакетів через Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Надіслати передачу файлів із сокетом Python:
https: // linuxhint.com / python_socket_file_transfer_send /