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:
- Meil peaks olema kaks terminali juurdepääsuga Linuxi süsteemi.
- Eelistatav Linuxi maitse on Ubuntu.
- Python3 tuleks installida.
- Mõlemad Linuxi süsteemid peaksid saama üksteist pingida. Kasutage ping
käsk pingi kontrollimiseks. - Üks süsteem peaks toimima serverina ja teine süsteem peaks kliendina toimima ühel kindlal ajal.
Piirangud:
Enne kui jätkame, peaksime teadma, et sellel programmil on mõned piirangud.
- Selle programmi käitamiseks peaks olema installitud Python3 +. Kui käitate pythoni vanemates versioonides, võite täheldada viga või erinevat käitumist.
- Selle programmi kaudu saab praegu edastada ainult tekstifaili. Mis tahes muu vormingus fail, mis ei sisalda teksti, võib ebaõnnestuda.
- Programmis on käsitletud programmeerimise põhierandeid.
- Programm võib töötada või mitte töötada muul operatsioonisüsteemil kui Ubuntu.
- Tekstifail peaks kliendi poolel olema lühike, kuna on kasutatud puhvri suurust 1024 baiti.
Seadistage nõuded:
- Selle programmi proovimiseks vajame vähemalt ühte Linuxi süsteemi. Kuid soovitatav on kasutada kahte erinevat Linuxi süsteemi, mis on ühendatud võrgu kaudu.
- Kaks süsteemi tuleks ühendada Etherneti, Wi-Fi või muu ühenduse kaudu.
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.pyVigu ei tohiks olla ja väljaprindid peaksid olema allpool
Server loetleb porti: 9898Kopeeritud 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.pyOleme 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 õnnestusServer 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.
- server.py:
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:
suAndke kogu luba .py-fail:
chmod 777 server.pyKäivitage server.py:
./ server.py impordipesaSocket-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 = 9898Nüü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.
murdaSee tuleb välja B_serveri lõpmatult silmusest.
- klient.py:
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 = 9898See 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:
- Kui server ei tööta 9898 pordis, näete allpool viga
Jälgimine (viimane kõne oli viimane):
Fail "klient.py ", rida 22, sisses.ühendama ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Ühendus keeldus
- Allpool kuvatakse viga, kui IP-aadressi ei edastata kliendi poolel
Jookse nagu
python3 klient.py < serverip address >- 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, sisses.ühendama ((ServerIp, PORT))
pistikupesa.gaierror: [Errno -2] Nimi või teenus pole teada
- Allpool kuvatakse viga, kui porti kasutatakse nagu 98980
Jälgimine (viimane kõne oli viimane):
Fail "klient.py ", rida 22, sisses.ühendama ((ServerIp, PORT))
OverflowError: getsockaddrarg: port peab olema 0-65535.
- 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, sissefail = 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.