Python

UDP-pakketten verzenden en ontvangen via Python

UDP-pakketten verzenden en ontvangen via Python
We kennen al twee belangrijke transportlaagprotocollen zoals TCP en UDP. Voor meer informatie over TCP en UDP kunt u de referentiesectie raadplegen:.  In dit artikel zullen we leren hoe u UDP-pakketten kunt verzenden en ontvangen met behulp van het python-programma.

Verwachtingen:

Hier zijn enkele belangrijke punten die uit dit artikel kunnen worden geleerd:

  1. Wat tekst verzenden met het python-programma dat het UDP-protocol gebruikt.
  2. Wat tekst ontvangen met het python-programma dat het UDP-protocol gebruikt.
  3. Controleer UDP-pakket in Wireshark.
  4. Meer informatie over python-code om UDP-pakketten te verzenden en ontvangen.

Algemeen Opstellingsschema:

Systeem A en B zouden elkaar moeten kunnen pingen.

Aannames of beperkingen:

  1. Beide systemen zouden Linux met Ubuntu moeten hebben. De code kan wel of niet werken op een ander besturingssysteem zoals Windows10, MAC enz.
  2. Beide systemen zouden python versie 3 . moeten hebben. Deze code kan wel of niet werken op python 2.7 versie.

Opmerking: u kunt de referentie raadplegen voor het uitproberen van UDP-pakketten verzenden en ontvangen via Linux CLI voordat u python-bestanden gebruikt om dezelfde taak uit te voeren.

Python-bestanden:

Er zijn twee python-bestanden server.py en cliënt.py. serverbestand en clientbestand moeten respectievelijk aanwezig zijn in Serversysteem en Clientsysteem Client.

Server.py

stopcontact importeren
import systeem
als len (sys.argv) == 3:
# Haal het "IP-adres van de server" en ook het "poortnummer" op van
argument 1 en argument 2
ip = sys.argv[1]
poort = int(sys.argv[2])
anders:
print("Loop als: python3-server.py ")
uitgang(1)
# Maak een UDP-socket
s = stopcontact.stopcontact (stopcontact).AF_INET, stopcontact.SOCK_DGRAM)
# Bind de socket aan de poort
server_address = (ip, poort)
zo.bind(server_adres)
print("Doe Ctrl+c om het programma af te sluiten !!")
terwijl waar:
print("####### Server luistert #######")
gegevens, adres = s.recvfrom(4096)
print("\n\n 2. Server ontvangen: ", gegevens.decoderen('utf-8'), "\n\n")
send_data = input("Typ wat tekst om te verzenden => ")
zo.sendto(send_data).coderen('utf-8'), adres)
print("\n\n 1. Server verzonden: ", send_data,"\n\n")

Cliënt.py

stopcontact importeren
import systeem
als len (sys.argv) == 3:
# Haal "IP-adres van server" op en ook het "poortnummer" van argument 1 en argument 2
ip = sys.argv[1]
poort = int(sys.argv[2])
anders:
print("Uitvoeren als: python3-client.py ")
uitgang(1)
# Maak een socket voor server
s = stopcontact.stopcontact (stopcontact).AF_INET, stopcontact.SOCK_DGRAM, 0)
print("Doe Ctrl+c om het programma af te sluiten !!")
# Laten we gegevens verzenden via het UDP-protocol
terwijl waar:
send_data = input("Typ wat tekst om te verzenden =>");
zo.sendto(send_data).coderen('utf-8'), (ip, poort))
print("\n\n 1. Client verzonden: ", send_data, "\n\n")
gegevens, adres = s.recvfrom(4096)
print("\n\n 2. Klant heeft ontvangen: ", gegevens.decoderen('utf-8'), "\n\n")
# sluit het stopcontact
zo.dichtbij()

UDP-pakket verzenden/ontvangen:

Laten we een voorbeeld nemen, zoals we een UDP-pakket van systeem A naar systeem B sturen. Dus in het server-clientconcept moeten we de server aan de systeem B-kant en de client aan de systeem A-kant draaien.

We hebben ook geldige IP-adressen.

Systeem A IP: 192.168.1.6
Systeem B IP: 192.168.1.102

Nu zullen we, in tegenstelling tot UDP-pakketten verzenden en ontvangen via Linux CLI, uitvoeren server.py in systeem, B [192.168.1.102] en dan gaan we rennen cliënt.py in systeem A [192.168.1.6].

Hoe server te draaien?.py in 192.168.1.102?

Hier is de opdracht om de server uit te voeren:.py

$python3-server.py 192.168.1.102 4444

Hier is de schermafbeelding

Hier zijn twee argumenten voor het python-programma:. 1st argument is het IP-adres van de server zelf, hier is het 192.168.1.102 en 2nd argument is poort welke server zal luisteren, hier hebben we 4444 gekozen.

Hoe client te draaien?.py in 192.168.1.6?

Hier is de opdracht om client uit te voeren:.py

$python3-client.py 192.168.1.102 4444

Hier is de schermafbeelding

Hier zijn twee argumenten voor het python-programma:. 1st argument is het IP-adres van de server, hier is het 192.168.1.102 en 2nd argument is poort waar de server draait. Voor ons voorbeeld is het 4444.

Stuur of ontvang een sms:

Zoals je kunt zien, zijn we klaar om te communiceren tussen twee systemen. Maar we moeten eerst bij de klant beginnen. Laten we iets in de client typen en kijken of het de server bereikt of niet.

Gegevens verzenden van klant: “Ik ben van klant”

Screenshot formulier klant:

Nu zou dit clientbericht naar de server moeten komen. Hier is de server-screenshot.

Nu kunnen we aan de serverzijde zien dat we ook de optie hebben om iets naar de klant te sturen. Laten we dat proberen.

Gegevens verzenden van klant: "Ik ben van Server"

Schermafbeelding server:

En hier is de schermafbeelding aan de kant van de klant:.

Nu gaat dit oneindige keren door totdat we het python-programma stoppen met Ctrl+c.

Controleer het UDP-pakket in Wireshark:

Nu hebben we wat gecommuniceerd, maar hoe komen we te weten dat UDP werd gebruikt om die pakketten te verzenden of te ontvangen?. We kunnen de opname dus controleren in Wireshark.

Laten we eens kijken naar het pakket wanneer client [192.168.1.6] stuurde data [“Ik ben van Client”] naar server [192.168.1.6].

Code uitleg:

Raadpleeg voor de basisuitleg van de pythoncode "Python Socket File Transfer Send" in het referentiegedeelte.

We zullen alleen belangrijke regelscodes uitleggen voor het client- en serverpython-bestand. Er zijn nuttige opmerkingen in de client- en servercode.

Uitleg klantcode:

als len (sys.argv) == 3:

De bovenstaande regel is vereist om te controleren of de gebruiker de vereiste verplichte argumenten heeft doorgegeven. Anders wordt het programma afgesloten. Dezelfde controle is aanwezig in het serverprogramma.

s = stopcontact.stopcontact (stopcontact).AF_INET, stopcontact.SOCK_DGRAM, 0)

De bovenstaande regel is om een ​​socketserver te maken met UDP [SOCK_DGRAM] protocol. Dezelfde code staat op de server.py.

terwijl waar:

Om het programma in oneindige lus uit te voeren totdat de gebruiker Ctrl+c . doet. Dezelfde code staat op de server.py.

zo.sendto(send_data).coderen('utf-8'), (ip, poort))

Om gegevens te verzenden voor genoemd ik p en haven aantal.

gegevens, adres = s.recvfrom(4096)

Om gegevens te ontvangen die van de server komen. Dezelfde code staat op de server.py.

Servercode uitleg:

zo.sendto(send_data).coderen('utf-8'), adres)

Gegevens naar klantadres verzenden.

Conclusie:

We kunnen UDP-gegevens verzenden of ontvangen met behulp van het python-programma. Intern gebruikt het server-clientmechanisme client.

Referenties:

Om TCP te begrijpen: https://linuxhint.com/tcp_packet_capture_analysis/
Om UDP te begrijpen: https://linuxhint.com/udp_wireshark_analysis/
UDP-pakketten verzenden en ontvangen via Linux CLI:
https://linuxhint.com/send_receive_udp_packets_linux_cli/
Python Socket-bestandsoverdracht Verzenden:
https://linuxhint.com/python_socket_file_transfer_send/

Wijs uw muisknoppen anders toe voor verschillende software met X-Mouse Button Control
Misschien heeft u een tool nodig waarmee u de bediening van uw muis kunt veranderen bij elke applicatie die u gebruikt. Als dit het geval is, kunt u e...
Microsoft Sculpt Touch draadloze muis Review
Ik las onlangs over de Microsoft Sculpt Touch draadloze muis en besloot hem te kopen. Nadat ik het een tijdje had gebruikt, besloot ik mijn ervaring e...
AppyMouse trackpad en muisaanwijzer op het scherm voor Windows-tablets
Tabletgebruikers missen vaak de muisaanwijzer, vooral wanneer ze gewend zijn om de laptop te gebruiken. Het touchscreen Smartphones en tablets hebben ...