Python-socket-ohjelmointi - Ennen kuin aloitan Python-socket-ohjelmoinnilla, toivon, että sinulla on hyvät perusteet pythonissa. Jos tiedät myös Djangon, se olisi vielä helpompi ymmärtää. Ei, socket-ohjelmointi ei liity Djangoon, mutta Python-socket-ohjelmoinnin ja Djangon terminologiat ovat melkein samat, vaikkakin ne ovat kaksi eri luokkaa. Joten aloitan, mikä tarkalleen on Python Socket -ohjelmointi? Python Socket -ohjelmointi ei ole vain pythonissa, vaan myös Java ja melkein kaikki muut ohjelmointikielet. Mutta pythonin tapauksessa pistorasioiden ohjelmointi on todella helppo ymmärtää. Python Socket -ohjelmointi tarkoittaa verkon ohjelmointia. Se sisältää asiakaspuoleen ja Python Socket -palvelimeen liittyvät koodit. Mutta se on määritelmä aivan yhtä hyvä kuin kirja, jonka mukaan C-ohjelmointia käytetään ohjelmistojen kehittämiseen. Ja ei, en ole täällä. Olen täällä varmistaakseni, että saat syvemmälle ymmärrystä Python-socket-ohjelmoinnin perusteista, ennen kuin alat itse kirjoittaa omia socket-moduuleja. Joten aloitetaan ja katsotaan, kuinka pistorasia toimii joko asiakaspuolella tai Python Socket -palvelimen puolella.

Mikä on Python Socket -ohjelmointi?

Jos olet oppinut C-ohjelmoinnin, python-pistorasio-ohjelmoinnin oppiminen Pythonissa olisi erittäin helppoa, koska ne ovat melkein samat. Yksinkertaistamiseksi python-socket-ohjelmointi on vain pala koodeja siitä, kuinka verkon tietokoneet kommunikoivat keskenään. Ja tämä ei pääty vain LAN-pohjaiseen verkkoon, se tukee myös WAN-, MAN- ja intranet-pohjaisia ​​verkkoja. Käytämme jopa pistorasioita päivittäisessä elämässämme. Ei ymmärrä? Annan teille yksinkertaisen esimerkin. Kun haluat muodostaa yhteyden sanoen Facebook.com, kirjoitat yksinkertaisesti saman asian URL-palkkiin. Joten tämä juuri luoma yhteys ei ole vain DNS-jutun luoma. Tämä kaikki määritetään python-socket-ohjelmoinnin avulla. Pistorasiat päättävät kuinka kaksi verkkoa kommunikoivat. Mikä tahansa verkon kautta tapahtuva viestintä, voi se olla videota, VOIP-yhteyksiä tai vain tekstiä; kaikki menee pistorasian läpi. Nyt kun tiedämme, mitkä pistorasiat ovat, annetaan kehittää omaa pistorasiaan pythonissa.

Kuvalähde: pixabay.com

Python-socket-ohjelmoinnin tyypit

Nyt siellä on runsaasti pistorasioita. Mutta emme puhu kaikista niistä, koska en pysty käsittelemään kaikkia niitä täällä. Voit joko luoda UDP-liitännän, TCP-liitännän tai jopa porttiliittimen ja niitä on paljon enemmän, jos jatkan. Mutta haluaisin tutkia enemmän TCP- ja UDP-pistorasioita tänään, koska ne ovat kaikkein perusteellisimpia ja ne voivat olla erittäin hyviä aloittelijalle python Socket -ohjelmoinnin aloittamiseen.

  • UDP-pistorasioiden ohjelmointi

User Datagram Protocol tai sen yleisesti tunnettu UDP on vaihtoehtoinen protokolla TCP: lle, joka siirtää paketteja yhdestä isäntästä toiseen. Mutta toisin kuin TCP (siirtohallintaprotokolla), UDP on yhteydetön protokolla ja se ei ole virran suuntautunut. Tämä tarkoittaa, että UDP-palvelin kaappaa vain kaikista isännäistä tulevat paketit tunnistamatta luotettavaa lähdeyhteyttä. Käytämme socket.socket-toimintoa tähän. Pythoniin luodaan yksinkertainen UDP-liitin seuraavalla tavalla:

Tuo pistorasia #liitäntäyksikön tuonti python-kirjastosta # Nyt meidän on luotava AF_INET ja sukka dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) tulosta “Socket Creation Successful”

Joo. Siinä kaikki ja olemme luoneet yksinkertaisen UDP-pistorasian täällä pythonissa. Python-Socket-ohjelmointi tai edes yksinkertaisen pistorasian luominen ei ole rakettitiede. Mutta iso asia on kuitenkin UDP-palvelimen ja asiakkaan koodaamisessa. Koska UDP-liitännät ovat yhteydetöntä, pilkut käynnistetään lähetys- ja vastaanotto-toimintojen avulla. Nämä toiminnot eivät edellytä niiden kytkemistä toisiinsa. He voivat tosiasiallisesti lähettää ja vastaanottaa paketteja mistä tahansa satunnaisesta lähteestä. UDP-palvelin luodaan seuraavasti:

Tuo socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) print “Yhteyden hakeminen koneen porttiin”, portti

kun taas 1:

tiedot, osoite = s.recvalkaen (1024)

tulosta tiedot

Tämä ei ehkä näytä paljoa, mutta näin se todella luodaan. Täällä voi käyttää mitä tahansa satamaa. Olen juuri valinnut satunnaiseksi yhden 2924. UDP-palvelin tarvitsee portin olla avoinna tulevien yhteyksien lähettämistä ja vastaanottamista varten. Porttia ei ole kuunneltu tai yhteyksiä tai pyyntöjä ole hyväksytty. Se tapahtuu vain ilman todennusta. Kokeile yllä olevaa palvelinta päätelaitteella ja katso kuinka se toimii.

Tämä on vain yksinkertainen luomamme UDP-palvelin. Tehdään siitä hieman mielenkiintoisempi ja myös hieman monimutkaisempi:

'' Tämä on yksinkertainen UDP-socket-palvelin '' tuo socketimport sys

HOST = “” # Täällä voidaan kokeilla kaikkia käytettävissä olevia käyttöliittymiä

PORT = 2924 # Mikä tahansa satunnainen portti, jota ei oletuksena käytetä Windows- tai Linux-distrossa

# UDP-pistorasian koodaus

yrittää :

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

tulosta ”Socket alustettu” '

paitsi socket.error, msg:

print “Pistorasian luominen epäonnistui. Seuraava virhe tapahtui: ”+ str (msg (0)) +” Message ”+ msg (1)

sys.exit ()

# Nyt meidän täytyy sitoa tämä pistorasia yllä olevaan isäntään ja porttiin

yrittää:

s.bind ((HOST, PORT))

paitsi socket.error, msg:

print “Sidontapistoke epäonnistui. Seuraava virhe keskeytti sidonnan: ”+ str (msg (0)) +” Message ”+ msg (1)

sys.exit ()

tulosta 'Pistorasian sidonta valmis'

#Pitä yllä vakiintunutta yhteyttä

kun taas 1:

# kaappaa tietoja asiakkaalta muuttuvan datan ja osoitteen avulla

d = s.recv alkaen (1024)

data = d (0)

osoite = d (1)

jos ei tietoja:

tauko

vastaus = 'OK …' + tiedot

s.sendto (vastaus, osoite)

tulosta 'Token message (' + osoite (0) + ':' + str (osoite (1)) + ') -' + data.strip ()

s.close ()

Suorita yllä oleva ohjelma ja käynnistät UDP-palvelimen portissa 2924. Onnittelut, että olet onnistunut luomaan Socket in Python -sovelluksen. Ja muista huomata, että UDP-palvelin pystyy käsittelemään asiakkaiden kuormitusta toisin kuin TCP-palvelin. Tärkein syy siihen, että UDP-palvelimella ei ole kiinteää yhteyttä, kuten TCP-palvelimessa.

Suositellut kurssit

  • Sertifiointikurssi Rubyn virheenkorjauksessa
  • PHP MySQL -kurssi
  • VB.NET-ohjelmoinnin sertifiointikurssi
  • Täydellinen ITIL-säätiön koulutus
  • UDP-asiakasohjelmointi

Nyt kun olemme luoneet UDP-palvelimen onnistuneesti, tarvitsemme asiakkaan luomaan asianmukaisen yhteyden siihen, jotta tiedämme sen toiminnan. Annetaan siis työskennellä oikean UDP-asiakkaan luomisesta Pythoniin. Tämä asiakas muodostaa yhteyden yllä luomaamme UDP-palvelimeen:

'' Yksinkertaisen UDP-asiakkaan usind-pistorasioiden luominen '' tuo socketimport sys

# UDP-pistorasian luominen

yrittää:

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

paitsi socket.error:

tulosta 'Socket luominen epäonnistui'

sys.exit ()

isäntä = '127.0.0.1'; #Voit myös kokeilla tämän IP: n localhost insead -sovellusta, molemmat ovat samoja.

portti = 2924;

kun taas (1):

msg = raw_input ('Kirjoita palvelimelle lähetettävä viesti:')

yrittää :

#Nyt meidän on asetettava merkkijonot

s.sendto (msg, (isäntä, portti))

# Nyt meidän on saatava tiedot ja osoitteet asiakkaalta käyttämällä tietoja ja osoitetta

d = s.recv alkaen (1024)

vastaus = d (0)

osoite = d (1)

tulosta 'Vastaus palvelimelta on:' + vastaus

paitsi socket.error, msg:

tulosta 'Seuraavat virheet ilmestyivät:' + str (msg (0)) + 'Message' + msg (1)

sys.exit ()

Jep. UDP-asiakkaan luominen Python Socket -ohjelmoinnissa on paljon helpompaa kuin UDP-palvelimen luominen. Mutta näin se menee. Mielestäni minun ei tarvitse selittää mitään yllä olevasta koodiosasta, koska olen jo maininnut kaikki vaadittavat asiat # tag-kommentissa. Varmista vain, että antamasi IP-osoite ja portti ovat oikein ja palomuuri ei estä yhteyttä, muuten se johtaa aina virheeseen riippumatta.

  • TCP-Socket-ohjelmointi

Nyt kun olemme oppineet luomaan UDP-asiakkaan ja palvelimen, katsotaanpa TCP-pistorasioiden ohjelmointia. Käytämme samaa socket.socket-toimintoa TCP-liitännän luomiseen tähän.

tuo socket # moduuliliittimen tuominen python-kirjastoista # luo AF_INET ja suoraa socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) tulosta 'Socket Creation Successful'

Täällä AF_INET: tä käytetään Ipv4-osoiteyhteyteen ja sukkavirta on TCP-suuntautunut protokolla. Tämä on yksinkertainen luomamme TCP-liitäntä. Nyt luomme kehittyneen version samasta asiasta. Heitämme tässä myös poikkeuksia, samalla tavalla kuin heitimme luotaessa UDP-palvelimia ja -asiakkaita, joten jos yhteydet epäonnistuvat, tiedämme missä oikea ohjelma sijaitsee. Socket.error -ohjelmaa käytetään käsittelemään kaikkia näitä virheitä, jotka ovat samanlaisia ​​kuin UDP-ohjelmointi.

Joten nyt luodaan edellä mainitun virheenkäsittelyn avulla pistorasia ja muodostetaan yhteys isäntään facebook.com. Näin se on tehtävä:

Tuo pistorasia #liitäntämoduulintuontijärjestelmän tuominen: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

paitsi socket.error, msg:

tulosta 'Socket luominen epäonnistui. Seuraava virhe tapahtui: '+ str (msg (0)) +', Virhesanoma: '+ msg (1)

sys.exit ();

tulosta 'Socket Creation onnistunut'

host = 'www.facebook.com'

portti = 2924

yrittää:

remote_ip = socket.gethostbyname (host)

paitsi socket.gaierror:

tulosta 'Väärä isäntänimi. Poistuminen …'

sys.exit ()

tulosta ”+ isäntä + IP-osoite” on ”+ kauko_ip

s.connect ((remote_ip, portti))

tulosta 'Socket Connected to' + host + 'ip' + remote_ip

Nyt tämä riittää, jos meidän on vain luotava yhteys. Mutta se ei ole tavoitteemme. Aiomme luoda yhteyden, jossa voimme lähettää ja vastaanottaa tietoja myös molemmista päistä. Voimme lähettää tietoja sendall-toiminnolla. Joten tässä miten se menee:

Tuo pistorasia #liitäntämoduulintuontijärjestelmän tuominen: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

paitsi socket.error, msg:

tulosta 'Socket luominen epäonnistui. Seuraava virhe tapahtui: '+ str (msg (0)) +', Virhesanoma: '+ msg (1)

sys.exit ();

tulosta 'Socket Creation onnistunut'

host = 'www.facebook.com'

portti = 2924

yrittää:

remote_ip = socket.gethostbyname (host)

paitsi socket.gaierror:

tulosta 'Väärä isäntänimi. Poistuminen …'

sys.exit ()

tulosta ”+ isäntä + IP-osoite” on ”+ kauko_ip

s.connect ((remote_ip, portti))

tulosta 'Socket Connected to' + host + 'ip' + remote_ip

#tiedonsiirto sendall-toiminnolla

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

yrittää :

s.sendall (sanoma)

paitsi socket.error:

#Lähetä epäonnistui

tulosta 'Lähetysvirhe'

sys.exit ()

tulosta 'Viestin tila: Lähetetty'

Nyt kun olemme luoneet onnistuneen yhteyden ja voimme myös lähettää tietoja, katsotaan miten voimme vastaanottaa tiedot kokonaan. Näin se menee:

Tuo pistorasia #liitäntämoduulintuontijärjestelmän tuominen: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

paitsi socket.error, msg:

tulosta 'Socket luominen epäonnistui. Seuraava virhe tapahtui: '+ str (msg (0)) +', Virhesanoma: '+ msg (1)

sys.exit ();

tulosta 'Socket Creation onnistunut'

host = 'www.facebook.com'

portti = 2924

yrittää:

remote_ip = socket.gethostbyname (host)

paitsi socket.gaierror:

tulosta 'Väärä isäntänimi. Poistuminen …'

sys.exit ()

tulosta ”+ isäntä + IP-osoite” on ”+ kauko_ip

s.connect ((remote_ip, portti))

tulosta 'Socket Connected to' + host + 'ip' + remote_ip

#tiedonsiirto sendall-toiminnolla

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

yrittää :

s.sendall (sanoma)

paitsi socket.error:

#Lähetä epäonnistui

tulosta 'Lähetysvirhe'

sys.exit ()

tulosta 'Viestin tila: Lähetetty'

# Nyt tietojen saamiseksi käytämme recv-toimintoa sen saavuttamiseen

vastaus = s.recv (4096)

tulosta vastaus

Viimeinen asia on, että meidän on suljettava pistoke, jonka voimme tehdä seuraavalla koodilla:

s.close ()

Ja lopuksi sitova osa. Sidontatoiminnolla voidaan sitoa pistorasioita IP-osoitteiden ja porttien kanssa.

Tuo socketimport sysHOST = ”#Tämä on sama tapa kuin teimme UDP-protokollassaPORT = 2924 # portti tietojen käyttämiseen.

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

tulosta 'Hylsyn luominen onnistunut'

yrittää:

s.bind ((HOST, PORT))

paitsi socket.error, msg:

print 'Sidonta epäonnistui. Seuraavat virheilmoitukset '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

tulosta 'Hylsysidonta onnistunut'

Nyt meidän on kuunnettava saapuvat saapuvat yhteydet, jos tarvitsemme palvelinta yhteyden muodostamiseen. Tämä voidaan tehdä seuraavalla yksinkertaisella komennolla:

s.listen (10) print 'Kuuntelija aloitettu'

Ja lopuksi meidän on luotava pistorasia näiden yhteyksien hyväksymiseksi:

Tuo socketimport sysHOST = ”PORT = 2924

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

tulosta 'Socket Creation onnistunut'

yrittää:

s.bind ((HOST, PORT))

paitsi socket.error, msg:

print 'Sidonta epäonnistui. Seuraava virhe tapahtui '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

tulosta 'Socket sidonta onnistunut'

s.listen (10)

tulosta 'Kuuntelija aloitettu'

#Yhteiden hyväksyminen

conn, addr = s.accept ()

#Kytkettyjen asiakastietojen tarjoaminen

tulosta 'Yhteys luotu' + addr (0) + ':' + str (addr (1))

Täällä on todella paljon enemmän. Voimme myös kirjoittaa koodeja käsittelijöille ja muille tavaroille. Mutta mielestäni tämä olisi nyt. Varmista, että sinulla on nämä perusteet oikein, minkä jälkeen loput osat ovat vain pala kakkua opittavaksi.

Ensimmäinen kuvan lähde: pixabay.com

Aiheeseen liittyvät artikkelit:-

Tässä on artikkeleita, jotka auttavat sinua saamaan lisätietoja Python Socket -ohjelmoinnista, joten käy vain linkin läpi.

  1. 25 upeinta Python-haastattelua koskevat kysymykset ja vastaukset
  2. Ura Pythonissa
  3. Mitkä ovat Pythonin käytön edut ja rajoitukset?
  4. Tärkeä ero Python vs. Ruby Performance
  5. Johdanto Socket-ohjelmointiin PHP: ssä
  6. Socket-ohjelmointi Java-ohjelmassa | Pistorasiamenetelmä