Python Socket-programmering - Før jeg begynder med Python Socket-programmering, håber jeg, at du har gode grundlæggende oplysninger i python. Hvis du også kender Django, ville det være endnu lettere at forstå. Nej, socket-programmering er ikke relateret til Django, men terminologierne i Python socket-programmering og Django er næsten de samme, skønt de er to forskellige kategorier. Så til at begynde med, hvad er egentlig Python Socket-programmering? Python Socket-programmering findes ikke kun i python, men også i Java og næsten alle andre programmeringssprog. Men i tilfælde af python er socket-programmering faktisk meget let at forstå. Python Socket-programmering betyder netværksprogrammering. Det inkluderer klientsiden og Python Socket-server-relaterede koder. Men den definition er lige så god, som en bog om C-programmering bruges til at udvikle software. Og nej, jeg er ikke her for det. Jeg er her for at sikre, at du får en dybere forståelse af det grundlæggende i Python-sokelprogrammering, før du rent faktisk begynder at skrive dine egne socket-moduler. Så lad os komme i gang og se, hvordan socket fungerer enten på klientsiden eller på Python Socket-serversiden.

Hvad er Python Socket-programmering?

Hvis du har lært C-programmering, ville det være meget let at lære python-socket-programmering i Python, da de er næsten de samme. For at gøre det mere enklere er programmering af python-socket bare et stykke koder for, hvordan computere i et netværk kommunikerer med hinanden. Og dette slutter ikke med kun et LAN-baseret netværk, det understøtter også WAN-, MAN- og intranetbaserede netværk. Vi bruger endda stikkontakter i vores daglige liv. Forstår ikke? Lad mig give dig et simpelt eksempel. Når du vil oprette forbindelse til lad sige Facebook.com, skriver du simpelthen den samme ting i URL-linjen. Så denne forbindelse, som du lige har oprettet, oprettes ikke kun af DNS-tingene. Det hele konfigureres gennem programmering af python-socket. Sockets beslutter, hvordan to netværk kommunikerer. Enhver kommunikation, der går gennem et netværk, kan det være en video, VOIP-forbindelser eller bare tekst; alt går gennem en stikkontakt. Nu hvor vi ved, hvad der er stik, lader vi udvikle vores eget stik i python.

Billedkilde: pixabay.com

Typer af Python Socket-programmering

Nu er der masser af stikkontakter derude. Men vi vil ikke tale om dem alle, da jeg ikke kan dække hver eneste af dem her. Du kan enten oprette et UDP-stik, TCP-stik eller endda en portstik, og der er mange flere, hvis jeg fortsætter. Men jeg vil se mere på TCP- og UDP-stikkontakter i dag, da de er de mest grundlæggende, og de kan være ekstremt gode som et begynderpunkt til at komme i gang med Python Socket-programmering.

  • UDP Sockets Programmering

User Datagram Protocol eller dets almindeligt kendt som UDP er en alternativ protokol til TCP, der overfører pakker fra en vært til en anden. Men i modsætning til TCP (transmissionskontrolprotokol) er UDP en forbindelse uden protokol, og den er ikke-strømorienteret. Dette betyder, at UDP-serveren kun fanger indgående pakker fra hele værten uden at identificere en pålidelig kildeforbindelse. Vi bruger socket.socket-funktionen til at gøre dette. En simpel UDP-socket oprettes på følgende måde i Python:

import socket #importing socket module from python library # Nu skal vi oprette AF_INET og sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) udskriv “Socket Creation Successful”

Ja. Det er det, og vi har oprettet et simpelt UDP-stik her i python. Python Socket Programmering eller endda oprettelse af en simpel socket er ikke raketvidenskab. Men det store punkt ligger i kodning af UDP-serveren og klienten. Da UDP-stikkontakter er forbindelsesløse, initieres kommandoer med afsendelses- og modtagelsesstikfunktioner. Disse funktioner behøver ikke at have forbindelse til hinanden. De kan faktisk sende og modtage pakker fra enhver tilfældig kilde. Sådan oprettes en UDP-server:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) print “Anmoder om tilslutning til porten på maskinen”, port

mens 1:

data, adresse = s.recvfrom (1024)

udskriv data

Dette synes måske ikke meget, men det er sådan, det faktisk oprettes. Man kan bruge enhver port her. Jeg har netop valgt en tilfældig som 2924. UDP-serveren har brug for en port for at være åben for at sende og modtage indgående forbindelser. Der lytter ikke til port eller accepterer forbindelser eller anmodning. Det sker bare uden nogen godkendelse. Prøv at køre ovenstående server på en terminal og se, hvordan det fungerer.

Dette er bare en simpel UDP-server, som vi har oprettet. Lad os gøre det lidt mere interessant og også lidt mere kompliceret:

”'Dette er en simpel UDP-socket-server”' import socketimport-systemer

HOST = “” # Man kan prøve alle tilgængelige grænseflader her

PORT = 2924 # Enhver tilfældig port, der ikke bruges som standard på windows eller Linux-distros

# Kodning af UDP-stikket

prøve :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

udskriv “Socket initialized” '

undtagen socket.error, msg:

udskriv “Oprettelse af socket mislykkedes. Den følgende fejl opstod: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

# Nu er vi nødt til at binde dette stik til ovennævnte vært og port

prøve:

s.bind ((HOST, PORT))

undtagen socket.error, msg:

udskriv “Binding Socket failed. Efter fejl afbrød bindingen: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

print 'Socket binding afsluttet'

# Opret den etablerede forbindelse

mens 1:

# indfang data fra klienten ved hjælp af variable data og adresse

d = s.recvfrom (1024)

data = d (0)

adresse = d (1)

hvis ikke data:

pause

svar = 'OK …' + data

s.sendto (svar, adresse)

udskriv 'Token message (' + adresse (0) + ':' + str (adresse (1)) + ') -' + data.strip ()

s.close ()

Kør ovenstående program, og du vil starte en UDP Server på porten 2924. Tillykke, du har med succes oprettet en Socket i Python. Og sørg for, at du bemærker, at en UDP-server kan håndtere belastninger af klienter i modsætning til TCP-serveren, og den vigtigste årsag er, at der ikke er nogen fast forbindelse på en UDP-server, som for en TCP-server.

Anbefalede kurser

  • Certifikationskursus i rubin debugging
  • PHP MySQL-kursus
  • VB.NET-programmeringscertificeringskursus
  • Fuldfør ITIL Foundation Training
  • UDP-klientprogrammering

Nu, hvor vi med succes har oprettet en UDP-server, har vi brug for en klient til at etablere en ordentlig forbindelse til den, så vi ved, at det fungerer. Så lader arbejde med at oprette en ordentlig UDP-klient i Python. Denne klient opretter forbindelse til vores UDP-server, vi oprettede ovenfor:

”'Oprettelse af en simpel UDP-klient usind sockets” Import af socketimport-systemer

# Oprettelse af en UDP-stik

prøve:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

undtagen socket.error:

print 'Socket Oprettelse mislykkedes'

sys.exit ()

host = '127.0.0.1'; #Du kan også prøve at bruge localhost insead af denne IP, begge er de samme.

port = 2924;

mens (1):

msg = raw_input ('Indtast en meddelelse, der skal sendes til server:')

prøve :

#Nå er vi nødt til at indstille strengene

s.sendto (msg, (vært, port))

# Nu skal vi modtage data og adresse fra klienten ved hjælp af data og adresse

d = s.recvfrom (1024)

svar = d (0)

adresse = d (1)

udskriv 'Svar fra server er:' + svar

undtagen socket.error, msg:

udskriv 'Følgende fejl vises:' + str (msg (0)) + 'Message' + msg (1)

sys.exit ()

Jep. Oprettelse af en UDP-klient i Python Socket-programmering er meget lettere end at oprette en UDP-server. Men sådan går det. Jeg tror ikke, at jeg skulle have brug for at forklare noget fra ovenstående kode, da jeg allerede har nævnt alle de krævede ting i # tag-kommentarerne. Bare sørg for, at den IP-adresse og den port, du har indtastet, er korrekt, og at din firewall ikke blokerer forbindelsen, ellers vil den altid resultere i fejl uanset hvad.

  • TCP Socket-programmering

Nu hvor vi har lært, hvordan man opretter en UDP-klient og server, kan vi se på programmering af TCP-stikkontakter. Vi bruger den samme socket.socket-funktion til at oprette en TCP-socket her.

importer socket # Importer modulstikket fra python-biblioteker # opret en AF_INET og stream socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket Creation Successful'

Her bruges AF_INET til Ipv4-adresseforbindelse, og sokestrøm er en TCP-orienteret protokol. Dette er en enkel TCP-stik, som vi har oprettet. Nu opretter vi en avanceret version af den samme ting. Vi kaster også undtagelser her, på samme måde som vi kastede det, når vi opretter UDP-servere og -klienter, så i tilfælde af, at tilslutningen mislykkes, vil vi vide, hvor det egentlige program ligger. Socket.error vil blive brugt til at håndtere alle disse fejl, der ligner fejlen ved UDP-programmering.

Så lad os nu oprette en socket med ovenstående fejlhåndtering og oprette forbindelse til værten facebook.com. Sådan skal det gøres:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

undtagen socket.error, msg:

print 'Socket Oprettelse mislykkedes. Den følgende fejl opstod: '+ str (msg (0)) +', Fejlmeddelelse: '+ msg (1)

sys.exit ();

print 'Socket Oprettelse vellykket'

host = 'www.facebook.com'

port = 2924

prøve:

remote_ip = socket.gethostbyname (vært)

undtagen socket.gaierror:

udskriv 'Forkert værtsnavn. Afslutter …'

sys.exit ()

udskriv ”+ vært + IP-adresse 'er' + fjern_ip

s.connect ((remote_ip, port))

udskriv 'Socket Connected to' + host + 'på ip' + remote_ip

Nu er dette nok, hvis vi bare har brug for at få en forbindelse i gang. Men det er ikke vores mål. Vi agter at oprette en forbindelse, hvor vi også kunne sende og modtage data i begge ender. Vi kan sende data ved hjælp af sendall-funktionen. Så her er det hvordan det går:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

undtagen socket.error, msg:

print 'Socket Oprettelse mislykkedes. Den følgende fejl opstod: '+ str (msg (0)) +', Fejlmeddelelse: '+ msg (1)

sys.exit ();

print 'Socket Oprettelse vellykket'

host = 'www.facebook.com'

port = 2924

prøve:

remote_ip = socket.gethostbyname (vært)

undtagen socket.gaierror:

udskriv 'Forkert værtsnavn. Afslutter …'

sys.exit ()

udskriv ”+ vært + IP-adresse 'er' + fjern_ip

s.connect ((remote_ip, port))

udskriv 'Socket Connected to' + host + 'på ip' + remote_ip

# overførsel af data vha. sendall-funktionen

meddelelse = “GET / HTTP / 1.1 \ r \ n \ r \ n”

prøve :

s.sendall (meddelelse)

undtagen socket.error:

#Send mislykkedes

tryk 'Transmission Failure'

sys.exit ()

udskriv 'Meddelelsesstatus: Sendt'

Nu, hvor vi har oprettet en vellykket forbindelse, og vi også kan sende dataene, kan vi se, hvordan vi helt kunne modtage dataene. Sådan går det:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

undtagen socket.error, msg:

print 'Socket Oprettelse mislykkedes. Den følgende fejl opstod: '+ str (msg (0)) +', Fejlmeddelelse: '+ msg (1)

sys.exit ();

print 'Socket Oprettelse vellykket'

host = 'www.facebook.com'

port = 2924

prøve:

remote_ip = socket.gethostbyname (vært)

undtagen socket.gaierror:

udskriv 'Forkert værtsnavn. Afslutter …'

sys.exit ()

udskriv ”+ vært + IP-adresse 'er' + fjern_ip

s.connect ((remote_ip, port))

udskriv 'Socket Connected to' + host + 'på ip' + remote_ip

# overførsel af data vha. sendall-funktionen

meddelelse = “GET / HTTP / 1.1 \ r \ n \ r \ n”

prøve :

s.sendall (meddelelse)

undtagen socket.error:

#Send mislykkedes

tryk 'Transmission Failure'

sys.exit ()

udskriv 'Meddelelsesstatus: Sendt'

# Nu for at modtage data bruger vi recv-funktionen til at opnå dem

svar = s.recv (4096)

udskriv svar

Den sidste ting er, at vi er nødt til at lukke stikket, som vi kunne gøre det ved følgende kode:

s.close ()

Og endelig den bindende del. Vi kan bruge funktionen bind til at binde stikkene sammen med ip-adresser og porte.

import socketimport sysHOST = ”# Dette er på samme måde, som vi gjorde i UDP-protokollenPORT = 2924 # port for at få adgang til data.

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

print 'Oprettelse af stikkontakt vellykket'

prøve:

s.bind ((HOST, PORT))

undtagen socket.error, msg:

udskrivning 'Indbinding mislykkedes. Efter opstået fejl '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

print 'Socket Binding succesfuld'

Nu er vi nødt til at lytte indkommende efter indgående forbindelser, hvis vi har brug for serveren til at få forbindelse. Dette kan gøres med følgende enkle kommando:

s.listen (10) udskriv 'Listener startet'

Og endelig er vi nødt til at oprette en socket for at acceptere disse forbindelser:

import socketimport sysHOST = ”PORT = 2924

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

print 'Socket Oprettelse vellykket'

prøve:

s.bind ((HOST, PORT))

undtagen socket.error, msg:

udskrivning 'Indbinding mislykkedes. Efter fejl Opstod '+ str (msg (0)) +' Meddelelse '+ msg (1)

sys.exit ()

udskriv 'Socket binding vellykket'

s.listen (10)

udskriv 'lytter startet'

# Accepterer forbindelser

conn, addr = s.accept ()

#Giver tilsluttet klientinfo

print 'Forbindelse etableret med' + addr (0) + ':' + str (addr (1))

Der er faktisk meget mere ved dette. Vi kan også skrive koder for håndterere og andre ting. Men jeg tror, ​​det ville være det for nu. Sørg for, at du har disse grundlæggende korrekte, hvorefter de resterende dele kun er et stykke kage at lære.

Første billedskilde: pixabay.com

Relaterede artikler:-

Her er nogle artikler, der hjælper dig med at få mere detaljeret information om Python Socket-programmering, så bare gå gennem linket.

  1. 25 mest fantastiske Python-interviewspørgsmål og svar
  2. Karrierer i Python
  3. Hvad er fordelene og begrænsningerne ved at bruge Python?
  4. Vigtig forskel Python vs Ruby Performance
  5. Introduktion til Socket-programmering i PHP
  6. Socket-programmering i Java | Socket Class-metode

Kategori: