Python

Pošiljanje datotek s prenosom datotek Python

Pošiljanje datotek s prenosom datotek Python
Namen tega članka je učiti se kako prenesti besedilno datoteko prek omrežja prek programa python. Ta prenos datotek temelji na modelu odjemalskega strežnika za uporabo programiranja vtičnic v python3+.

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:

Omejitve:

Preden nadaljujemo, moramo vedeti, da ima ta program nekaj omejitev.

Nastavite zahteve:

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.py

Napak ne sme biti, spodaj pa bodo prikazani odtisi

Strežnik je naveden na vratih: 9898

Kopirano 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.py

Opazili 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 kopirana
Strež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.

  1. strežnik.py:
#!/ usr / bin / env python3

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:

su

Dajte vsa dovoljenja .datoteka py:

strežnik chmod 777.py

Zaženi strežnik.py:

./ strežnik.py uvozna vtičnica
Uvaž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 = 9898

Zdaj 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.

odmor

To izhaja iz neskončne zanke while na B_server.

  1. stranka.py:
uvoz sys

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 = 9898

To 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:

  1. Spodaj lahko vidite napako, če strežnik ne deluje na vratih 9898

Sledenje (zadnji zadnji klic):

Datoteka "odjemalec.py ", vrstica 22, v
s.povezava ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Povezava zavrnjena
  1. Spodaj je prikazana napaka, če naslov IP ni poslan na strani odjemalca

Teči kot

odjemalca python3.py < serverip address >
  1. Spodaj je prikazana napaka, če je 1st argument na strani odjemalca ni naslov IP

Sledenje (zadnji zadnji klic):

Datoteka "odjemalec.py ", vrstica 22, v
s.povezava ((ServerIp, PORT))
vtičnica.gaierror: [Errno -2] Ime ali storitev ni znana
  1. Spodaj je prikazana napaka, če vrata uporabljate kot 98980

Sledenje (zadnji zadnji klic):

Datoteka "odjemalec.py ", vrstica 22, v
s.povezava ((ServerIp, PORT))
OverflowError: getsockaddrarg: vrata morajo biti 0-65535.
  1. Spodaj je prikazana napaka, če je »vzorec.txt «ni prisoten na strani odjemalca.

Sledenje (zadnji zadnji klic):

Datoteka "odjemalec.py ", vrstica 25, v
datoteka = 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.

Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...
Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...
Kako prenesti in igrati Sid Meier's Civilization VI v Linuxu
Uvod v igro Civilization 6 je sodoben pogled na klasični koncept, uveden v seriji iger Age of Empires. Ideja je bila dokaj preprosta; začeli bi v zelo...