Diagram osnovne nastavitve:
Tu je osnovni diagram za zagon tega programa.
Zaradi enostavnosti bomo v celotnem članku sistem A imenovali kot A_client, sistem B pa kot B_server.
Zahteve za datoteke:
Potrebujemo strežnik.py in ta datoteka mora biti prisotna v strežniškem sistemu. V našem primeru strežnik.py mora biti v sistemu B_server.
Še dve datoteki stranka.py in vzorec.txt mora biti prisoten v odjemalskem sistemu. V našem primeru bi morali biti ti dve datoteki prisotni v sistemu A_client.
Predpostavke:
Tu so predpostavke:
- Morali bi imeti dva sistema Linux s terminalskim dostopom.
- Zaželen okus Linuxa je Ubuntu.
- Treba je namestiti Python3.
- Oba sistema Linux bi morala imeti možnost medsebojnega pinga. Uporaba ping
ukaz za preverjanje pinga. - En sistem bi moral delovati kot strežnik, drugi sistem pa hkrati kot odjemalec.
Omejitve:
Preden nadaljujemo, moramo vedeti, da ima ta program nekaj omejitev.
- Za zagon tega programa je treba namestiti Python3 +. Če se izvaja v starejših različicah pythona, lahko opazite napake ali drugačno vedenje.
- Od tega trenutka lahko prek tega programa prenesete samo besedilno datoteko. Katera koli druga oblika datoteke, ki ne vsebuje besedila, morda ne bo uspela.
- V programu so obravnavane osnovne programske izjeme.
- Program se lahko izvaja ali pa tudi ne v drugih operacijskih sistemih razen Ubuntuja.
- Besedilna datoteka mora biti kratka na strani odjemalca, saj je bila uporabljena velikost medpomnilnika 1024 bajtov.
Nastavite zahteve:
- Za preizkus tega programa potrebujemo vsaj en sistem Linux. Vendar je priporočljivo uporabiti dva različna sistema Linux, ki sta povezana prek omrežja.
- Dva sistema je treba povezati prek Etherneta ali Wi-Fi ali katere koli druge povezave.
Izvorna koda strežnika:
https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / server.py
Izvorna koda stranke:
https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / client.py
Kako zagnati programe in pričakovane rezultate:
Tu so koraki za izvajanje programa.
1. korak: Pojdite na sistem B_server in odprite terminal. Bližnjica za odprtje terminala je Alt + Ctrl + t.
2. korak: Zdaj pojdite po poti, kjer strežnik.py je prisoten.
Korak 3: Zdaj zaženite strežnik.py kot spodaj
strežnik python3.pyNapak ne sme biti, spodaj pa bodo prikazani odtisi
Strežnik je naveden na vratih: 9898Kopirano ime datoteke bo popravljeno.txt na strani strežnika
4. korak: Zdaj odprite terminal v sistemu A_client.
5. korak: Pojdite na pot, kjer je odjemalec.py in vzorec.txt so prisotni.
6. korak: Zdaj zaženite odjemalca.py kot spodaj
odjemalca python3.pyOpazili smo, da moramo poznati naslov IP strežnika. Izvedemo lahko spodnji ukaz, da poznamo naslov IP sistema B_server.
ifconfig
Zdaj bi moral biti izhod sistema A_client takšen
################### Spodaj je od strežnika prejeto sporočilo ###################| -------------------------------- |
Hi Client [Naslov IP: 192.168.1.102],
** Dobrodošli na strežniku **
-Strežnik
| -------------------------------- |
7. korak: Zdaj pojdite na B_server in poiščite spodnji izhod
Datoteka je bila uspešno kopiranaStrežnik je prekinil povezavo
Korak 8: Ime datoteke mora biti eno.txt v mapi strežnika. Vsebina te.txt mora biti enak vzorec.txt.
Torej smo datoteko iz odjemalca v strežnik uspešno kopirali prek omrežja s pomočjo programa python.
Pojasnila kode:
Obstajata dve datoteki python strežnik.py in stranka.py.
Upoštevajte, da bomo enkrat razložili, ali je katera koda enaka znotraj strežnika.py in odjemalec.py.
- strežnik.py:
To je shebang line, kar privzeto pomeni ta strežnik.py bi moral uporabljati python3. Poglejmo eno prednost te vrstice.
Izvedli smo strežnik.py ali odjemalec.py všeč python3 <.py file name>. Zdaj lahko brez uporabe python3 zaženemo datoteko python. Sledite spodnjim ukazom
Pojdi v super uporabniški način:
suDajte vsa dovoljenja .datoteka py:
strežnik chmod 777.pyZaženi strežnik.py:
./ strežnik.py uvozna vtičnicaUvažamo knjižnico vtičnic v program python, ko gremo
za uporabo vtičnice za povezavo.
s = vtičnica.vtičnica ()
Ustvarjamo objekt "S" za dostop do vseh načinov vtičnice. To je koncept OOP.
LUKA = 9898Zdaj izberemo eno vrata, kjer bo poslušal strežnik. Namesto tega lahko uporabimo ne rezervirana vrata.
s.bind ((", PORT))Za vezavo ip naslova strežnika na ta vrata uporabljamo metodo bind [9898]. Ena ugotovitev je, da bi lahko namesto prvega argumenta metode vezave uporabili natančen naslov IP strežnika, vendar se odločimo, da ostane prazen, saj to deluje v redu.
s.bind ((naslov IP, PORT))datoteka = odprta ("recv.txt "," wb ")
Odprli smo eno ime datoteke „recv.txt "v strežniku za način pisanja in dobljen kazalnik datoteke. To je potrebno, saj moramo eno besedilno datoteko kopirati iz odjemalca.
medtem ko je True:Začnimo eno neskončno zanko while, saj je naloga strežnika počakati, da odjemalec komunicira s strežnikom na teh vratih 9898. Torej je potrebna zanka while.
conn, addr = s.sprejme ()Ta koda sprejme katero koli dohodno zahtevo za povezavo s strani odjemalca. Conn bo uporabil »conn " komunicirati s stranko in “Addr” je naslov IP odjemalca, ki je poslal strežnik na ta strežnik na vrata 9898.
msg = "\ n \ n | --------------------------------- | \ n Pozdravljeni [IP naslov:"+ addr [0] +"], \ n ** Dobrodošli na strežniku ** \ n -Server \ n
| --------------------------------- | \ n \ n \ n "
Ta koda je namenjena ustvarjanju sporočila za pošiljanje odjemalcu. To sporočilo je treba natisniti na odjemalskem terminalu. To potrjuje, da je odjemalec sposoben komunicirati s strežnikom.
povez.pošlji (sporoč.encode ())Zdaj imamo pripravljeno sporočilo in ga nato pošljemo stranki "Conn". Ta koda dejansko pošlje sporočilo odjemalcu.
RecvData = povez.rekv (1024)Ta koda sprejema vse podatke, ki so poslani s strani odjemalca. V našem primeru pričakujemo vsebino vzorca.txt v »RecvData«.
medtem ko RecvData:Še ena zanka while s pogojem RecvData ni prazna. V našem primeru ni prazen.
mapa.pisanje (RecvData)Ko imamo vsebino v sebi »RecvData« potem pišemo v to datoteko “Recv.txt " z uporabo kazalca datoteke "mapa".
RecvData = povez.rekv (1024)Spet poskušam prejeti, če obstajajo podatki odjemalca. Enkrat »RecvData« nima podatkov, bo koda prekinila zanko while.
mapa.zapri ()To bo samo zaprlo kazalec datoteke, ko smo končali s pisanjem datotek.
povez.zapri ()To bo prekinilo povezavo s stranko.
odmorTo izhaja iz neskončne zanke while na B_server.
- stranka.py:
Uvoz knjižnice sys, kot želimo, uporabite argument argument v pythonu.
if (len (sys.argv)> 1):ServerIp = sys.argv [1]
sicer:
print ("\ n \ n Zaženi kot \ n odjemalca python3.py < serverip address > \ n \ n ")
izhod (1)
Ko posredujemo naslov IP B_server po odjemalcu imena datoteke.py med izvajanjem moramo ta naslov IP strežnika ujeti znotraj odjemalca.
… Če (len (sys.argv)> 1): => Za zagotovitev, da uporabnik posreduje vsaj en argument kot naslov IP in ujame ta naslov IP insdie “ServerIP”.
Če uporabnik ne posreduje vsaj ene kode argumenta, prikaže pomoč in prihaja iz kode.
PRISTANIŠČE = 9898To morajo biti ista vrata, kot je omenjeno na strani B_server.
s.povezava ((ServerIp, PORT))Ta koda bo vzpostavila povezavo TCP s strežnikom IP s temi vrati. Vse, kar je narobe na tem koncu, povzroči napake v povezavi.
datoteka = odprta ("vzorec.txt "," rb ")Odpiramo “vzorec.txt «v načinu branja za branje samo vsebine.
SendData = datoteka.beri (1024)Branje vsebine datoteke in vstavitev “Pošlji podatke " spremenljivka.
medtem ko SendData:Začenjamo zanko one while, če »Pošlji podatke " ima podatke. V našem primeru, če je “vzorec.txt «ni prazen, vsebovati bi moral podatke.
s.pošlji (SendData)Zdaj lahko pošljemo vsebino “Vzorec.txt " na strežnik z uporabo vtičnice "S".
SendData = datoteka.beri (1024)Spet branje, če je kaj ostalo. Torej iz datoteke ne bo ničesar brati “SendData” bo prazen in bo izšel iz medtem zanke.
s.zapri ()To ni tesna povezava s strani odjemalca.
Posnetki zaslona Ubuntu na strani strežnika
Stran odjemalca Ubuntu
Preizkušene kombinacije:
- Linux kot strežnik in Linux kot odjemalec: PASS
- Linux kot odjemalec in Linux kot strežnik: PASS
- Linux kot strežnik in Windows10 kot odjemalec: PASS
- Linux kot odjemalec in Windows10 kot strežnik: PASS
Priporočilo je, da za strežnik in odjemalca uporabite dva sistema Linux.
Pričakovane napake:
- Spodaj lahko vidite napako, če strežnik ne deluje na vratih 9898
Sledenje (zadnji zadnji klic):
Datoteka "odjemalec.py ", vrstica 22, vs.povezava ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Povezava zavrnjena
- Spodaj je prikazana napaka, če naslov IP ni poslan na strani odjemalca
Teči kot
odjemalca python3.py < serverip address >- Spodaj je prikazana napaka, če je 1st argument na strani odjemalca ni naslov IP
Sledenje (zadnji zadnji klic):
Datoteka "odjemalec.py ", vrstica 22, vs.povezava ((ServerIp, PORT))
vtičnica.gaierror: [Errno -2] Ime ali storitev ni znana
- Spodaj je prikazana napaka, če vrata uporabljate kot 98980
Sledenje (zadnji zadnji klic):
Datoteka "odjemalec.py ", vrstica 22, vs.povezava ((ServerIp, PORT))
OverflowError: getsockaddrarg: vrata morajo biti 0-65535.
- Spodaj je prikazana napaka, če je »vzorec.txt «ni prisoten na strani odjemalca.
Sledenje (zadnji zadnji klic):
Datoteka "odjemalec.py ", vrstica 25, vdatoteka = odprta ("vzorec.txt "," rb ")
FileNotFoundError: [Errno 2] Ni take datoteke ali imenika: 'sample.txt '
Zaključek:
Z uporabo tega programa lahko prek omrežja s pomočjo programa python pošljemo preprosto besedilno datoteko iz enega sistema v drugega. To nam daje osnovno učenje programiranja pythona in vtičnice tudi za pošiljanje podatkov po omrežju.