Python

Изпращайте и получавайте UDP пакети чрез Python

Изпращайте и получавайте UDP пакети чрез Python
Вече знаем за два основни протокола от транспортния слой като TCP и UDP. За повече информация относно TCP и UDP можете да проверите справочния раздел.  В тази статия ще научим как да изпращаме и получаваме UDP пакети с помощта на програмата python.

Очаквания:

Ето някои ключови моменти, които можете да научите от тази статия

  1. Изпращане на някакъв текст с помощта на програма на python, която използва UDP протокол.
  2. Получаване на някакъв текст с помощта на програма на python, която използва UDP протокол.
  3. Проверете UDP пакета в Wireshark.
  4. Научете за python кода за изпращане и получаване на UDP пакети.

Обща диаграма за настройка:

Системи А и Б трябва да могат да се пингират взаимно.

Предположения или ограничения:

  1. И двете системи трябва да имат Linux с Ubuntu. Кодът може или не може да работи на друга операционна система като Windows10, MAC и т.н.
  2. И двете системи трябва да имат 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, порт)
с.обвързване (адрес на_сървър)
print ("Направете Ctrl + c, за да излезете от програмата !!")
докато е вярно:
print ("######## Сървърът слуша #######")
данни, адрес = s.recv от (4096)
печат ("\ n \ n 2. Получен сървър: ", данни.декодиране ('utf-8'), "\ n \ n")
send_data = input ("Въведете малко текст за изпращане =>")
с.sendto (send_data.encode ('utf-8'), адрес)
печат ("\ 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 ("Въведете малко текст, който да изпратите =>");
с.sendto (send_data.encode ('utf-8'), (ip, порт))
печат ("\ n \ n 1. Клиент изпратен: ", send_data," \ n \ n ")
данни, адрес = s.recv от (4096)
печат ("\ n \ n 2. Клиентът получи: ", данни.декодиране ('utf-8'), "\ n \ n")
# затворете гнездото
с.близо()

Изпращане / получаване на UDP пакет:

Да вземем пример като ще изпратим UDP пакет от система A към система B. Така че, в концепцията сървър-клиент, трябва да стартираме сървър от страна на система Б и клиент от страна на система А.

Също така имаме валидни IP адреси.

Система A IP: 192.168.1.6
IP система на система B: 192.168.1.102

Сега за разлика от изпращането и получаването на UDP пакети чрез Linux CLI ще стартираме сървър.py в система, B [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 и 2nd аргументът е порт кой сървър ще слуша, тук избрахме 4444.

Как да стартирам клиент.py в 192.168.1.6?

Ето командата за стартиране на клиент.py

$ 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 Socket“ в справочния раздел.

Ще обясним само важни редови кодове за клиентския и сървърния питонов файл. Вътре в кода на клиента и сървъра има полезни коментари.

Обяснение на клиентския код:

ако len (sys.argv) == 3:

Горният ред се изисква, за да се провери дали потребителят е предал задължителни задължителни аргументи. В противен случай програмата ще излезе. Същата проверка има и в сървърната програма.

s = гнездо.гнездо (гнездо.AF_INET, гнездо.SOCK_DGRAM, 0)

Горният ред е да създадете сокет сървър с UDP [SOCK_DGRAM] протокол. Същият код има и в сървъра.py.

докато е вярно:

За да стартирате програма в безкраен цикъл, докато потребителят направи Ctrl + c. Същият код има и в сървъра.py.

с.sendto (send_data.encode ('utf-8'), (ip, порт))

Да изпратите данни за споменатите ip и пристанище номер.

данни, адрес = s.recv от (4096)

За да получавате данни, идващи от сървъра. Същият код има и в сървъра.py.

Обяснение на сървърния код:

с.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 Socket File Transfer Изпращане:
https: // linuxhint.com / python_socket_file_transfer_send /

Как да увеличите FPS в Linux?
FPS означава Кадри в секунда. Задачата на FPS е да измерва честотата на кадрите при възпроизвеждане на видео или игрални изпълнения. С прости думи бро...
Топ Oculus App Lab Games
Ако сте собственик на слушалки на Oculus, тогава трябва да знаете за странично зареждане. Sideloading е процесът на инсталиране на несъхранявано съдър...
Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...