Python

Pythoni sokli failiedastus Saada

Pythoni sokli failiedastus Saada
Selle artikli eesmärk on õppida kuidas edastada tekstifail võrgu kaudu Pythoni programmi kaudu. See failiedastus põhineb serveri kliendimudelil, et kasutada soklite programmeerimist python3-s+.

Põhiseadistamise skeem:

Siin on selle programmi käivitamise põhiline seadistamisskeem.

Lihtsuse huvides nimetame kogu artiklis süsteemi A-ks A_client ja süsteemi B B-serveriks.

Failinõuded:

Me vajame server.py ja see fail peaks olema serverisüsteemis olemas. Meie puhul server.py peaks olema B_serveri süsteemis.

Veel kaks faili klient.py ja proov.txt peaks olema kliendisüsteemis olemas. Meie juhul peaksid need kaks faili olema A_client süsteemis.

Eeldused:

Siin on eeldused:

Piirangud:

Enne kui jätkame, peaksime teadma, et sellel programmil on mõned piirangud.

Seadistage nõuded:

Serveri lähtekood:

https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / server.py

Kliendi lähtekood:

https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / klient.py

Programmide käitamine ja eeldatav väljund:

Siin on juhised programmi käivitamiseks.

1. samm: minge B_serveri süsteemi ja avage terminal. Otsetee terminali avamiseks on Alt + Ctrl + t.

2. samm: minge nüüd serveri teele.py on kohal.

3. samm: käivitage nüüd server.py nagu allpool

python3 server.py

Vigu ei tohiks olla ja väljaprindid peaksid olema allpool

Server loetleb porti: 9898

Kopeeritud faili nimi on rekv.txt serveri poolel

4. samm: nüüd avage terminal A_client süsteemis.

5. samm: minge kliendi teele.py ja proov.txt on olemas.

6. samm: käivitage nüüd klient.py nagu allpool

python3 klient.py

Oleme täheldanud, et peame teadma serveri IP-aadressi. B_serveri süsteemi IP-aadressi teadmiseks saame allpool käsu täita.

ifconfig

Nüüd peaks A_client süsteemi väljund olema selline

################## Allpool on sõnum serverilt ###################
| -------------------------------- | |
Tere klient [IP-aadress: 192.168.1.102],
** Tere tulemast serverisse **
-Server
| -------------------------------- | |

7. samm: minge nüüd B_serverisse ja otsige väljundit allpool

Faili kopeerimine õnnestus
Server sulges ühenduse

8. samm: peaks olema üks failinimi recv.txt serveri kaustas. Selle soovituse sisu.txt peaks olema sama proov.txt.

Nii oleme faili edukalt kopeerinud kliendi ja serveri vahel võrgu kaudu Pythoni programmi kaudu.

Koodi selgitused:

Pythoni faile on kaks server.py ja klient.py.

Pange tähele, et me selgitame üks kord, kui mõni kood on serveri sees sama.py ja klient.py.

  1. server.py:
#!/ usr / bin / env python3

See on shebangi rida, mis tähendab vaikimisi seda serverit.py peaks kasutama python3. Vaatame selle rea ühte eelist.

Oleme serveri käivitanud.py või klient.py meeldib python3 <.py file name>. Nüüd ilma python3-d kasutamata saame käivitada pythoni faili. Järgige allolevaid käske

Minge superkasutaja režiimi:

su

Andke kogu luba .py-fail:

chmod 777 server.py

Käivitage server.py:

./ server.py impordipesa
Socket-raamatukogu importimine Pythoni programmi, nagu me jätkame
kasutada ühendamiseks pistikupesa.
s = pistikupesa.pistikupesa ()

Loome objekti "S" juurdepääsu kõigile pistikupesa meetoditele. See on OOP-ide kontseptsioon.

SADAM = 9898

Nüüd valime ühe pordi, kus server kuulab. Selle asemel võime kasutada reserveerimata porti.

s.köide ((", PORT))

Serveri ip-aadressi selle pordi sidumiseks kasutame sidumismeetodit [9898]. Üks tähelepanek on see, et oleksime võinud sidumismeetodi esimese argumendi asemel kasutada serveri täpset IP-aadressi, kuid valisime tühjaks, kuna see töötab hästi.

s.köide ((IP-aadress, PORT))
fail = avatud ("rekv.txt "," wb ")

Oleme avanud ühe failinime “recv.txt ”serveris kirjutusrežiimi jaoks ja sai faili kursori. See on vajalik, kuna peame kliendist ühe tekstifaili kopeerima.

tõsi:

Alustame serveri ülesandeks ühte lõpmatut silmust, kui oodata, kuni klient suhtleb selles 9898 pordis serveriga. Nii et see on vajalik silmus.

konn, addr = s.nõustu ()

Selle koodiga võetakse vastu kõik kliendi sissetulevad ühendustaotlused. Conn kasutabühendama suhelda kliendi ja „Addr” on kliendi IP-aadress, kes on saatnud sellele serverile pordi 9898 segamisnõude.

msg = "\ n \ n | --------------------------------- | \ n Tere klient [IP-aadress:
"+ addr [0] +"], \ n ** Tere tulemast Serverisse ** \ n -Server \ n
| --------------------------------- | \ n \ n \ n "

Selle koodi abil luuakse kliendile saadetav sõnum. See teade tuleks printida klienditerminalile. See kinnitab, et klient suudab serveriga suhelda.

ühend.saada (sõnum.kodeerida ())

Nüüd on meil sõnum valmis ja siis saadetakse see selle abil kliendile "Konna". See kood saadab kliendile tegelikult sõnumi.

RecvData = ühendus.tagasivaade (1024)

See kood võtab vastu kõik andmed, mis on saadetud kliendi poolelt. Meie puhul ootame valimi sisu.txt sisse „RecvData”.

samas RecvData:

Veel üks aeg tingimusega RecvData ei ole tühi. Meie puhul pole see tühi.

faili.kirjuta (RecvData)

Kui meil on sisu sees „RecvData” siis kirjutame sellesse faili “Rets.txt ” faili kursori abil "Fail".

RecvData = ühendus.tagasivaade (1024)

Jällegi proovin saada, kui kliendilt on andmeid. Ükskord „RecvData” pole andmeid, katkestab kood while-tsükli.

faili.Sulge()

See lihtsalt sulgeb faili kursori, kui oleme failide kirjutamisega lõpetanud.

ühend.Sulge()

See sulgeb ühenduse kliendiga.

murda

See tuleb välja B_serveri lõpmatult silmusest.

  1. klient.py:
impordi süsteem

Sys-teegi importimine, kui soovime, kasutab Pythonis argumentide võimalust.

kui (len (sys.argv)> 1):
ServerIp = sys.argv [1]
muu:
print ("\ n \ n Käivita nagu \ n python3 klient.py < serverip address > \ n \ n ")
väljapääs (1)

Kuna me edastame B_serveri IP-aadressi pärast failinime klienti.Py töötamise ajal peame selle serveri IP-aadressi kliendis kinni püüdma.

... kui (len (sys.argv)> 1): => Veendumaks, et kasutaja edastaks vähemalt ühe argumendi IP-aadressina ja tabaks selle IP-aadressi sisse „ServerIP”.

Kui kasutaja ei edasta vähemalt ühte argumentkoodi, kuvatakse abi ja tuleb koodist välja.

SADAM = 9898

See peab olema sama port, nagu mainitud B_serveri poolel.

s.ühendage ((ServerIp, PORT))

See kood teeb TCP-ühenduse serveri IP-ga selle pordiga. Kõik, mis selles pontsis valesti on, toob kaasa seoses ebaõnnestumistega.

fail = avatud ("näidis.txt "," rb ")

Avame “proovi.txt ”lugemisrežiimis sisu lugemiseks.

SendData = fail.loe (1024)

Faili sisu lugemine ja sisestamineSendData ” muutuv.

SendData ajal:

Kui „SendData ” omab andmeid. Meie juhul, kui “proov.txt ”pole tühi, sellel peaksid olema andmed.

s.saada (SendData)

Nüüd saame saata sisu “Proov.txt ” serverisse sokliobjekti abil "S".

SendData = fail.loe (1024)

Jällegi lugedes, kas midagi on veel jäänud. Seega pole failist midagi lugeda „SendData” on tühi ja see tuleb while-silmusest välja.

s.Sulge()

See ei sulge ühendust kliendi poolelt.

Ubuntu ekraanipildid serveri poolel

Ubuntu ekraanipildid kliendi poolel

Testitud kombinatsioonid:

  • Linux serverina ja Linux kliendina: PASS
  • Linux kliendina ja Linux serverina: PASS
  • Linux serverina ja Windows10 kliendina: PASS
  • Linux kliendina ja Windows10 serverina: PASS

Soovitus on kasutada kahte Linuxi süsteemi serveri ja kliendi jaoks.

Eeldatavad vead:

  1. Kui server ei tööta 9898 pordis, näete allpool viga

Jälgimine (viimane kõne oli viimane):

Fail "klient.py ", rida 22, sisse
s.ühendama ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Ühendus keeldus
  1. Allpool kuvatakse viga, kui IP-aadressi ei edastata kliendi poolel

Jookse nagu

python3 klient.py < serverip address >
  1. Allpool on viga näha, kui 1st argument kliendi poolel pole IP-aadress

Jälgimine (viimane kõne oli viimane):

Fail "klient.py ", rida 22, sisse
s.ühendama ((ServerIp, PORT))
pistikupesa.gaierror: [Errno -2] Nimi või teenus pole teada
  1. Allpool kuvatakse viga, kui porti kasutatakse nagu 98980

Jälgimine (viimane kõne oli viimane):

Fail "klient.py ", rida 22, sisse
s.ühendama ((ServerIp, PORT))
OverflowError: getsockaddrarg: port peab olema 0-65535.
  1. Allpool on viga näha, kui „näidis.txt ”ei esine kliendi poolel.

Jälgimine (viimane kõne oli viimane):

Fail "klient.py ", rida 25, sisse
fail = avatud ("näidis.txt "," rb ")
FileNotFoundError: [Viga 2] Sellist faili ega kataloogi pole: 'sample.txt '

Järeldus:

Selle programmi abil saame Python programmi abil saata võrgu kaudu lihtsa tekstifaili ühest süsteemist teise süsteemi. See annab meile Pythoni ja sokli programmeerimise algõppe ka andmete edastamiseks võrgu kaudu.

5 parimat arkaadmängu Linuxile
Tänapäeval on arvutid tõsised mängimiseks kasutatavad masinad. Kui te ei saa uut rekordit, teate, mida ma mõtlen. Selles postituses saate teada mõnda ...
Lahing Wesnothi eest 1.13.6 Areng vabastati
Lahing Wesnothi eest 1.13.6 ilmus eelmisel kuul, on 1-s kuues arendusversioon.13.x-seeria ja see pakub mitmeid täiustusi, eelkõige kasutajaliidese ja ...
League of Legendsi installimine Ubuntu 14-le.04
Kui olete League of Legends fänn, siis on see teile võimalus proovida League of Legendsit. Pange tähele, et LOL-i toetab PlayOnLinux, kui olete Linuxi...