Forventninger:
Her er noen viktige punkter du kan lære av denne artikkelen
- Sende tekst ved hjelp av python-program som bruker UDP-protokoll.
- Motta tekst ved hjelp av python-program som bruker UDP-protokoll.
- Sjekk UDP-pakken i Wireshark.
- Lær om pythonkode for å sende og motta UDP-pakker.
Generelt oppsettdiagram:
System A og B skal kunne pinge hverandre.
Antakelser eller begrensninger:
- Begge systemene skal ha Linux med Ubuntu. Koden fungerer kanskje ikke på andre operativsystemer som Windows10, MAC osv.
- Begge systemene skal ha python versjon 3. Denne koden fungerer kanskje ikke på python 2.7 versjon.
Merk: Du kan sjekke referanse for å prøve å sende og motta UDP-pakker via Linux CLI før du går etter python-filer for å gjøre den samme oppgaven.
Python-filer:
Det er to python-filer server.py og klient.py. serverfil og klientfil skal være tilstede i henholdsvis serversystem og klientsystem.
Server.py
importkontaktimporter sys
hvis len (sys.argv) == 3:
# Få "IP-adresse til serveren" og også "portnummer" fra
argument 1 og argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
ellers:
print ("Kjør som: python3 server.py
utgang (1)
# Opprett en UDP-kontakt
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM)
# Bind kontakten til porten
server_adresse = (ip, port)
s.bind (server_adresse)
skriv ut ("Gjør Ctrl + c for å avslutte programmet !!")
mens det er sant:
print ("######## Server lytter #######")
data, adresse = s.recvfrom (4096)
skriv ut ("\ n \ n 2. Server mottatt: ", data.dekode ('utf-8'), "\ n \ n")
send_data = input ("Skriv inn tekst som skal sendes =>")
s.sendto (send_data.kode ('utf-8'), adresse)
skriv ut ("\ n \ n 1. Server sendt: ", send_data," \ n \ n ")
Klient.py
importkontaktimporter sys
hvis len (sys.argv) == 3:
# Få "IP-adresse til serveren" og også "portnummeret" fra argument 1 og argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
ellers:
print ("Kjør som: python3-klient.py
utgang (1)
# Opprett stikkontakt for serveren
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM, 0)
skriv ut ("Gjør Ctrl + c for å avslutte programmet !!")
# La oss sende data gjennom UDP-protokollen
mens det er sant:
send_data = input ("Skriv inn tekst som skal sendes =>");
s.sendto (send_data.kode ('utf-8'), (ip, port))
skriv ut ("\ n \ n 1. Client sent: ", send_data," \ n \ n ")
data, adresse = s.recvfrom (4096)
skriv ut ("\ n \ n 2. Kunden mottok: ", data.dekode ('utf-8'), "\ n \ n")
# lukk kontakten
s.Lukk()
Send / motta UDP-pakke:
La oss ta et eksempel som vi sender UDP-pakke fra system A til system B. Så, i server-klientkonsept, må vi kjøre server på System B-siden og klient på System A-siden.
Vi har også gyldige IP-adresser.
System A IP: 192.168.1.6System B IP: 192.168.1.102
Nå i motsetning til Send og motta UDP-pakker via Linux CLI, kjører vi server.py i System, B [192.168.1.102] og så skal vi løpe klient.py i System A [192.168.1.6].
Hvordan kjøre server.py i 192.168.1.102?
Her er kommandoen for å kjøre serveren.py
$ python3-server.py 192.168.1.102 4444Her er skjermbildet
Her er det to argumenter for python-programmet. 1St argumentet er IP-adressen til selve serveren, her er dens 192.168.1.102 og 2nd argumentet er port hvilken server som skal lytte, her har vi valgt 4444.
Hvordan kjøre klient.py i 192.168.1.6?
Her er kommandoen for å kjøre klient.py
$ python3-klient.py 192.168.1.102 4444Her er skjermbildet
Her er det to argumenter for python-programmet. 1St argumentet er IP-adressen til serveren, her er dens 192.168.1.102 og 2nd argumentet er porten der serveren kjører. For vårt eksempel er det 4444.
Send eller motta tekst:
Nå som du ser er vi klare til å kommunisere mellom to systemer. Men vi må først starte fra klienten. La oss skrive noe i klienten og se om det når ut til serveren eller ikke.
Send data fra klient: “Jeg kommer fra klient”
Skjermbilde skjema klient:
Nå skal denne klientmeldingen komme til serveren. Her er serverbildet.
Nå kan vi se på serversiden også at vi har muligheten til å sende noe til klienten. La oss prøve det.
Send data fra klient: “Jeg kommer fra serveren”
Servers skjermbilde:
Og her er skjermbildet på klientsiden.
Nå vil dette fortsette uendelig mange ganger til vi stopper pythonprogrammet ved hjelp av Ctrl + c.
Sjekk UDP-pakken i Wireshark:
Nå har vi gjort litt kommunikasjon, men hvordan blir vi kjent med at UDP ble brukt til å sende eller motta disse pakkene. Så vi kan sjekke fangst i Wireshark.
La oss se pakken når klient [192.168.1.6] sendte data ["Jeg kommer fra klient"] til serveren [192.168.1.6].
Kode forklaring:
For grunnleggende forklaring på pythonkode, se “Python Socket File Transfer Send” i referansedelen.
Vi vil bare forklare viktige linjekoder for klient- og serverpython-filen. Det er nyttige kommentarer inne i klienten og serverkoden.
Klientkode forklaring:
hvis len (sys.argv) == 3:Ovennevnte linje er nødvendig for å sjekke om brukeren har bestått obligatoriske argumenter. Ellers avslutter programmet. Samme sjekk er der i serverprogrammet.
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM, 0)Ovennevnte linje er å lage sokkelserver med UDP [SOCK_DGRAM] protokoll. Samme kode er der på serveren.py.
mens det er sant:Å kjøre programmet i uendelig løkke til brukeren gjør Ctrl + c. Samme kode er der på serveren.py.
s.sendto (send_data.kode ('utf-8'), (ip, port))Å sende data for nevnte ip og havn Nummer.
data, adresse = s.recvfrom (4096)For å motta data som kommer fra serveren. Samme kode er der på serveren.py.
Forklaring av serverkode:
s.sendto (send_data.kode ('utf-8'), adresse)Send data til klientadressen.
Konklusjon:
Vi kan sende eller motta UDP-data ved hjelp av python-program. Internt bruker den serverklientmekanismen.
Referanser:
For å forstå TCP: https: // linuxhint.no / tcp_packet_capture_analysis /
For å forstå UDP: https: // linuxhint.com / udp_wireshark_analysis /
Send og motta UDP-pakker via Linux CLI:
https: // linuxhint.no / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Send:
https: // linuxhint.no / python_socket_file_transfer_send /