Python Socket Programming - Voordat ik begin met Python Socket Programming, hoop ik dat je een goede basis hebt in python. Als je Django ook kent, zou het nog gemakkelijker te begrijpen zijn. Nee, socket-programmering is niet gerelateerd aan Django, maar de terminologieën in Python-socketprogrammering en Django zijn bijna hetzelfde, hoewel ze twee verschillende categorieën zijn. Dus om te beginnen, wat is Python Socket Programming precies? Python Socket-programmering is er niet alleen in python, maar ook in Java en bijna alle andere programmeertalen. Maar in het geval van python is socket programmeren eigenlijk heel gemakkelijk te begrijpen. Python-socketprogrammering betekent netwerkprogrammering. Het omvat client-side en Python Socket-server-side gerelateerde codes. Maar die definitie is net zo goed als een boek waarin staat dat C-programmering wordt gebruikt om software te ontwikkelen. En nee, ben hier niet voor. Ik ben hier om ervoor te zorgen dat je meer inzicht krijgt in de basisprincipes van Python-socketprogrammering, voordat je daadwerkelijk begint met het schrijven van je eigen socketmodules. Laten we dus aan de slag gaan en kijken hoe socket aan clientzijde of aan Python Socket-server werkt.

Wat is Python Socket Programming?

Als je C-programmeren hebt geleerd, zou het leren van python socket programmeren in Python heel eenvoudig zijn, omdat ze bijna hetzelfde zijn. Om het eenvoudiger te maken, zijn python-socketprogrammering slechts stukjes code over hoe computers in een netwerk met elkaar communiceren. En dit eindigt niet bij alleen een LAN-netwerk, het ondersteunt ook WAN-, MAN- en intranet-gebaseerde netwerken. We gebruiken zelfs stopcontacten in ons dagelijks leven. Niet begrijpende? Laat me u een eenvoudig voorbeeld geven. Wanneer u verbinding wilt maken met bijvoorbeeld Facebook.com, typt u eenvoudig hetzelfde in de URL-balk. Deze verbinding die u zojuist hebt gemaakt, wordt dus niet alleen gemaakt door de DNS-dingen. Dit wordt allemaal geconfigureerd via python socket-programmering. Sockets bepalen hoe twee netwerken communiceren. Elke communicatie die via een netwerk verloopt, of het nu een video, VOIP-verbindingen of alleen tekst is; alles gaat door een stopcontact. Nu we weten wat sockets zijn, laten we onze eigen socket in python ontwikkelen.

Afbeeldingsbron: pixabay.com

Typen Python-socketprogrammering

Nu zijn er heel veel stopcontacten. Maar we zullen het niet over allemaal hebben, omdat ik ze hier niet allemaal kan behandelen. Je kunt een UDP-socket, TCP-socket of zelfs een poort-socket maken en er zijn er nog veel meer als ik doorga. Maar ik zou vandaag meer willen kijken naar TCP- en UDP-sockets, omdat deze de meest basale zijn en ze als beginnend punt extreem goed kunnen zijn om aan de slag te gaan met het programmeren van Python Socket.

  • UDP-sockets programmeren

User Datagram Protocol of algemeen bekend als UDP is een alternatief protocol voor TCP dat pakketten overbrengt van de ene host naar de andere. Maar in tegenstelling tot TCP (transmissiebesturingsprotocol) is UDP een verbindingsloos protocol en is het niet-streamgericht. Dit betekent dat de UDP-server alleen binnenkomende pakketten van de hele host zal vastleggen zonder een betrouwbare bronverbinding te identificeren. We zullen de socket.socket-functie gebruiken om dit te doen. Een eenvoudige UDP-socket wordt op de volgende manier gemaakt in Python:

import socket #importerende socketmodule uit python bibliotheek # Nu moeten we AF_INET maken en sok dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) afdrukken “Socket Creation Succesvol”

Ja. Dat is alles en we hebben hier in python een eenvoudige UDP-socket gemaakt. Python Socket Programmering of zelfs het maken van een eenvoudige socket is geen rocket science. Maar het grote probleem ligt in het coderen van de UDP-server en de client. Aangezien UDP-sockets geen verbinding hebben, worden comm's geïnitieerd met functies voor verzenden en ontvangen van sockets. Deze functies vereisen niet dat ze met elkaar verbonden zijn. Ze kunnen pakketten verzenden en ontvangen vanuit elke willekeurige bron. Hier is hoe een UDP-server wordt gemaakt:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, poort)) afdrukken “Verbinding aanvragen met de poort op machine”, poort

terwijl 1:

data, adres = s.recvfrom (1024)

gegevens afdrukken

Dit lijkt misschien niet veel, maar dit is hoe het eigenlijk is gemaakt. Men kan hier elke poort gebruiken. Ik heb zojuist een willekeurige gekozen als 2924. De UDP-server heeft een poort nodig om inkomende verbindingen te kunnen verzenden en ontvangen. Er wordt niet naar de poort geluisterd of verbindingen of verzoeken geaccepteerd. Het gebeurt gewoon zonder enige authenticatie. Probeer de bovenstaande server op een terminal uit te voeren en kijk hoe het werkt.

Dit is slechts een eenvoudige UDP-server die we hebben gemaakt. Laten we het een beetje interessanter en ook een beetje ingewikkelder maken:

'' Dit is een eenvoudige UDP-socket-server '' import socketimport sys

HOST = "" # Men kan hier alle beschikbare interfaces proberen

PORT = 2924 # Elke willekeurige poort die niet standaard wordt gebruikt op Windows of Linux distros

# Codering van de UDP-socket

proberen :

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

print "Socket geïnitialiseerd" '

behalve socket.error, msg:

print “Socket creatie mislukt. De volgende fout is opgetreden: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

# Nu moeten we deze socket binden aan de bovenstaande host en poort

proberen:

s.bind ((HOST, PORT))

behalve socket.error, msg:

print “Bindcontact mislukt. De volgende fout onderbrak de binding: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

print 'Socket binding voltooid'

# Behoud de gevestigde verbinding

terwijl 1:

# gegevens van de client vastleggen met variabele gegevens en adres

d = s.recvvan (1024)

data = d (0)

adres = d (1)

indien geen gegevens:

breken

antwoord = 'OK …' + gegevens

s.sendto (antwoord, adres)

afdrukken 'Token-bericht (' + adres (0) + ':' + str (adres (1)) + ') -' + data.strip ()

s.close ()

Voer het bovenstaande programma uit en u start een UDP-server op poort 2924. Gefeliciteerd, u hebt met succes een Socket in Python gemaakt. En zorg ervoor dat een UDP-server heel veel clients kan verwerken in tegenstelling tot de TCP-server. De belangrijkste reden hiervoor is dat er geen vaste connectiviteit is in een UDP-server zoals in het geval van een TCP-server.

Aanbevolen cursussen

  • Certificatiecursus Ruby Debugging
  • PHP MySQL-cursus
  • VB.NET programmeercertificatiecursus
  • ITIL Foundation training voltooien
  • UDP-clientprogrammering

Nu we met succes een UDP-server hebben gemaakt, hebben we een client nodig om een ​​juiste verbinding tot stand te brengen, zodat we weten dat het werkt. Laten we dus werken aan het maken van een juiste UDP-client in Python. Deze client maakt verbinding met onze UDP-server die we hierboven hebben gemaakt:

'' Een eenvoudige UDP-client maken usind sockets '' import socketimport sys

# Een UDP-socket maken

proberen:

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

behalve socket. fout:

afdrukken 'Socket creatie mislukt'

sys.exit ()

host = '127.0.0.1'; #U kunt ook proberen localhost te gebruiken in plaats van dit IP-adres, beide zijn hetzelfde.

poort = 2924;

terwijl (1):

msg = raw_input ('Typ een bericht om naar de server te verzenden:')

proberen :

#Nu moeten we de tekenreeksen instellen

s.sendto (msg, (host, poort))

# Nu moeten we gegevens en adres van de klant ontvangen met behulp van gegevens en adres

d = s.recvvan (1024)

antwoord = d (0)

adres = d (1)

afdrukken 'Antwoord van server is:' + antwoord

behalve socket.error, msg:

print 'Volgende fout verscheen:' + str (msg (0)) + 'Message' + msg (1)

sys.exit ()

JEP. Het maken van een UDP-client bij het programmeren van Python Socket is veel eenvoudiger dan het maken van een UDP-server. Maar zo gaat het. Ik denk niet dat ik iets uit het bovenstaande stukje code zou moeten uitleggen, omdat ik alle vereiste dingen al in de # tagcommentaren heb genoemd. Zorg er alleen voor dat het IP-adres en de poort die u hebt ingevoerd correct zijn en dat uw firewall de verbinding niet blokkeert, anders zal het altijd een fout veroorzaken.

  • TCP-socketprogrammering

Nu we hebben geleerd hoe u een UDP-client en -server kunt maken, laten we eens kijken naar het programmeren van TCP-sockets. We zullen dezelfde socket.socket-functie gebruiken om hier een TCP-socket te maken.

import socket # Importeren van de module socket uit python bibliotheken # maak een AF_INET en stream socketssss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) afdrukken 'Socket Creation Succesvol'

Hier wordt AF_INET gebruikt voor IPv4-adresverbinding en is sockstream een ​​TCP-georiënteerd protocol. Dit is een eenvoudige TCP-socket die we hebben gemaakt. Nu gaan we een geavanceerde versie van hetzelfde maken. We zullen hier ook uitzonderingen doorgeven, op dezelfde manier zoals we het bij het maken van UDP-servers en -clients hebben gegooid, zodat we weten waar het eigenlijke programma ligt als de verbinding mislukt. Socket.error zal worden gebruikt om al deze fouten te verwerken, vergelijkbaar met die van UDP-programmering.

Dus laten we nu een socket maken met de bovenstaande foutafhandeling en verbinding maken met de host facebook.com. Dit is hoe het moet worden gedaan:

import socket #importeren van de socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

behalve socket.error, msg:

print 'Socket creatie mislukt. De volgende fout is opgetreden: '+ str (msg (0)) +', foutmelding: '+ msg (1)

sys.exit ();

print 'Socket Creation succesvol'

host = 'www.facebook.com'

poort = 2924

proberen:

remote_ip = socket.gethostbyname (host)

behalve socket.gaierror:

print 'Onjuiste hostnaam. Afsluiten …'

sys.exit ()

print ”+ host + IP-adres 'is' + remote_ip

s.connect ((remote_ip, port))

print 'Socket Verbonden met' + host + 'op ip' + remote_ip

Nu is dit voldoende als we gewoon een verbinding tot stand moeten brengen. Maar dat is niet ons doel. We zijn van plan een verbinding tot stand te brengen waar we ook gegevens aan beide uiteinden kunnen verzenden en ontvangen. We kunnen gegevens verzenden met de functie Sendall. Dus hier is hoe het gaat:

import socket #importeren van de socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

behalve socket.error, msg:

print 'Socket creatie mislukt. De volgende fout is opgetreden: '+ str (msg (0)) +', foutmelding: '+ msg (1)

sys.exit ();

print 'Socket Creation succesvol'

host = 'www.facebook.com'

poort = 2924

proberen:

remote_ip = socket.gethostbyname (host)

behalve socket.gaierror:

print 'Onjuiste hostnaam. Afsluiten …'

sys.exit ()

print ”+ host + IP-adres 'is' + remote_ip

s.connect ((remote_ip, port))

print 'Socket Verbonden met' + host + 'op ip' + remote_ip

#gegevens overbrengen met behulp van de sendall-functie

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

proberen :

s.sendall (bericht)

behalve socket. fout:

#Versturen mislukt

print 'Verzendingsfout'

sys.exit ()

print 'Berichtstatus: Verzonden'

Nu we een succesvolle verbinding hebben gemaakt en we de gegevens ook kunnen verzenden, laten we eens kijken hoe we de gegevens helemaal konden ontvangen. Dit is hoe het gaat:

import socket #importeren van de socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

behalve socket.error, msg:

print 'Socket creatie mislukt. De volgende fout is opgetreden: '+ str (msg (0)) +', foutmelding: '+ msg (1)

sys.exit ();

print 'Socket Creation succesvol'

host = 'www.facebook.com'

poort = 2924

proberen:

remote_ip = socket.gethostbyname (host)

behalve socket.gaierror:

print 'Onjuiste hostnaam. Afsluiten …'

sys.exit ()

print ”+ host + IP-adres 'is' + remote_ip

s.connect ((remote_ip, port))

print 'Socket Verbonden met' + host + 'op ip' + remote_ip

#gegevens overbrengen met behulp van de sendall-functie

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

proberen :

s.sendall (bericht)

behalve socket. fout:

#Versturen mislukt

print 'Verzendingsfout'

sys.exit ()

print 'Berichtstatus: Verzonden'

#Nu gebruiken we de functie recv om gegevens te ontvangen

antwoord = s.recv (4096)

print antwoord

Het laatste punt is dat we de socket moeten sluiten, wat we met de volgende code zouden kunnen doen:

s.close ()

En tot slot, het bindende deel. We kunnen de functie binden gebruiken om sockets met IP-adressen en poorten samen te binden.

import socketimport sysHOST = ”#Dit is op dezelfde manier als in UDP protocolPORT = 2924 # poort voor toegang tot gegevens.

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

print 'Socket creatie succesvol'

proberen:

s.bind ((HOST, PORT))

behalve socket.error, msg:

print 'Binden mislukt. Volgende fout opgetreden '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

print 'Socket Binding succesvol'

Nu moeten we inkomende naar binnenkomende verbindingen luisteren als we de server nodig hebben om verbinding te maken. Dit kan met het volgende eenvoudige commando:

s.listen (10) afdrukken 'Luisterer gestart'

En ten slotte moeten we een socket maken om deze verbindingen te accepteren:

import socketimport sysHOST = ”PORT = 2924

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

print 'Socket Creation succesvol'

proberen:

s.bind ((HOST, PORT))

behalve socket.error, msg:

print 'Binden mislukt. Volgende fout opgetreden '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

print 'Socket binding succesvol'

s.listen (10)

print 'Luisteraar gestart'

# Aanvaarden van verbindingen

conn, addr = s.accept ()

#Bieden van verbonden klantinformatie

print 'Verbinding tot stand gebracht met' + addr (0) + ':' + str (addr (1))

Hier zit eigenlijk veel meer in. We kunnen ook codes schrijven voor handlers en andere dingen. Maar ik denk dat dit het voorlopig wel zou zijn. Zorg ervoor dat je deze basisprincipes correct hebt, waarna de resterende delen slechts een fluitje van een cent zijn om te leren.

Eerste afbeeldingsbron: pixabay.com

Gerelateerde artikelen:-

Hier zijn enkele artikelen die u zullen helpen om meer details over de Python Socket Programming te krijgen, dus ga gewoon via de link.

  1. 25 meest verbazingwekkende vragen en antwoorden over het interview met Python
  2. Carrières in Python
  3. Wat zijn de voordelen en beperkingen van het gebruik van Python?
  4. Belangrijk verschil Python versus Ruby-prestaties
  5. Inleiding tot socketprogrammering in PHP
  6. Socket Programming in Java | Socket Class-methode