Ожидания:
Вот некоторые ключевые моменты, которые можно почерпнуть из этой статьи
- Отправка текста с помощью программы 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 сервер.ру а также клиент.ру. файл сервера и файл клиента должны присутствовать в системе сервера и системе клиента соответственно.
Сервер.ру
импортный сокетimport sys
если len (sys.argv) == 3:
# Получить «IP-адрес сервера», а также «номер порта» из
аргумент 1 и аргумент 2
ip = sys.argv [1]
порт = int (sys.argv [2])
еще:
print ("Запускаем как: сервер python3.ру
выход (1)
# Создать сокет UDP
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM)
# Привязать сокет к порту
server_address = (IP, порт)
s.привязать (адрес_сервера)
print ("Нажмите Ctrl + c, чтобы выйти из программы !!")
в то время как True:
print ("####### Сервер слушает #######")
данные, адрес = s.recvfrom (4096)
print ("\ n \ n 2. Сервер получил: ", данные.декодировать ('utf-8'), "\ n \ n")
send_data = input ("Введите текст для отправки =>")
s.sendto (send_data.кодировать ('utf-8'), адрес)
print ("\ n \ n 1. Сервер отправил: ", send_data," \ n \ n ")
Клиент.ру
импортный сокетimport sys
если len (sys.argv) == 3:
# Получить «IP-адрес сервера», а также «номер порта» из аргумента 1 и аргумента 2
ip = sys.argv [1]
порт = int (sys.argv [2])
еще:
print ("Запускаем как: клиент python3.ру
выход (1)
# Создать сокет для сервера
s = розетка.розетка (розетка.AF_INET, сокет.SOCK_DGRAM, 0)
print ("Нажмите Ctrl + c, чтобы выйти из программы !!")
# Отправим данные по протоколу UDP
в то время как True:
send_data = input ("Введите текст для отправки =>");
s.sendto (send_data.кодировать ('utf-8'), (ip, порт))
print ("\ n \ n 1. Отправлено клиентом: ", send_data," \ n \ n ")
данные, адрес = s.recvfrom (4096)
print ("\ n \ n 2. Клиент получил: ", данные.декодировать ('utf-8'), "\ n \ n")
# закрываем сокет
s.Закрыть()
Отправка / получение пакета UDP:
Давайте возьмем пример, как мы отправим пакет UDP из системы A в систему B. Итак, в концепции сервер-клиент мы должны запустить сервер на стороне системы B и клиент на стороне системы A.
Также у нас есть действующие IP-адреса.
Система А IP: 192.168.1.6Система B IP: 192.168.1.102
Теперь, в отличие от отправки и получения UDP-пакетов через Linux CLI, мы запустим сервер.ру в Системе, B [192.168.1.102], а затем запустим клиент.ру в Системе А [192.168.1.6].
Как запустить сервер.ру в 192.168.1.102?
Вот команда для запуска сервера.ру
$ python3 сервер.py 192.168.1.102 4444Вот скриншот
Здесь есть два аргумента в пользу программы Python. 1ул аргумент - IP-адрес самого сервера, здесь его 192.168.1.102 и 2nd аргумент - порт, который сервер будет слушать, здесь мы выбрали 4444.
Как запустить клиент.ру в 192.168.1.6?
Вот команда для запуска клиента.ру
клиент $ python3.py 192.168.1.102 4444Вот скриншот
Здесь есть два аргумента в пользу программы Python. 1ул аргумент - IP-адрес сервера, здесь его 192.168.1.102 и 2nd аргумент - порт, на котором работает сервер. В нашем примере это 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] протокол. Тот же код есть на сервере.ру.
в то время как True:Запускать программу в бесконечном цикле, пока пользователь не нажмет Ctrl + c. Тот же код есть на сервере.ру.
s.sendto (send_data.кодировать ('utf-8'), (ip, порт))Отправить данные по указанным ip а также порт номер.
данные, адрес = s.recvfrom (4096)Получать любые данные, поступающие с сервера. Тот же код есть на сервере.ру.
Объяснение кода сервера:
s.sendto (send_data.кодировать ('utf-8'), адрес)Отправить данные на адрес клиента.
Заключение:
Мы можем отправлять или получать данные UDP с помощью программы Python. Внутри он использует механизм клиент-сервер.
Рекомендации:
Чтобы понять TCP: https: // linuxhint.ru / tcp_packet_capture_analysis /
Чтобы понять UDP: https: // linuxhint.ru / udp_wireshark_analysis /
Отправлять и получать UDP-пакеты через Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Отправка файла сокета Python:
https: // linuxhint.ru / python_socket_file_transfer_send /