Grundlæggende opsætningsdiagram:
Her er det grundlæggende opsætningsdiagram til at køre dette program.
For enkelheds skyld kalder vi System A som A_client og System B som B_server i hele artiklen.
Filkrav:
Vi behøver server.py og denne fil skal være til stede på serversystemet. I vores tilfælde server.py skal være på B_server-systemet.
Yderligere to filer klient.py og prøve.txt skal være til stede i klientsystemet. I vores tilfælde skal disse to filer være til stede på A_client-systemet.
Antagelser:
Her er antagelserne:
- Vi burde have to Linux-systemer med terminaladgang.
- Foretrukken Linux-smag er Ubuntu.
- Python3 skal installeres.
- Begge Linux-systemer skal kunne pinge hinanden. Brug ping
kommando for at kontrollere ping. - Et system skal fungere som server, og det andet system skal fungere som klient på et bestemt tidspunkt.
Begrænsninger:
Før vi går videre, skal vi vide, at der er nogle begrænsninger i dette program.
- Python3 + skal installeres for at køre dette program. Du kan se fejl eller anden opførsel, hvis de køres på ældre versioner af Python.
- Kun tekstfiler kan overføres via dette program fra nu af. Alle andre formatfiler, der ikke indeholder tekst, kan mislykkes.
- Grundlæggende programmeringsundtagelser er blevet håndteret i programmet.
- Programmet kan muligvis køre på et andet operativsystem end Ubuntu.
- Tekstfilen skal være kort på klientsiden, da bufferstørrelse på 1024 bytes er blevet brugt.
Opsætningskrav:
- Vi har brug for mindst et Linux-system for at prøve dette program. Men anbefaling er at bruge to forskellige Linux-systemer, der er forbundet via netværk.
- To systemer skal forbindes via Ethernet eller Wi-Fi eller andre forbindelser.
Serverkildekode:
https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / server.py
Kildekildekode:
https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / client.py
Sådan køres programmer og forventet output:
Her er trinene til at udføre programmet.
Trin 1: Gå til B_server-systemet, og åbn en terminal. Genvej til at åbne en terminal er Alt + Ctrl + t.
Trin 2: Gå nu stien, hvor serveren er.py er til stede.
Trin 3: Kør nu serveren.py som nedenfor
python3-server.pyDer bør ikke være nogen fejl, og du skal se nedenstående udskrifter
Serveren er noteret på port: 9898Kopierede filnavne recv.txt på serversiden
Trin4: Åbn nu terminalen ved A_client-systemet.
Trin 5: Gå til stien, hvor klienten.py og prøve.txt er til stede.
Trin 6: Kør nu klient.py som nedenfor
python3-klient.pyVi har observeret, at vi har brug for at kende IP-adressen på serveren. Vi kan udføre kommandoen nedenfor for at kende IP-adressen til B_server-systemet.
ifconfig
Nu skal output af A_client-systemet være sådan
#################### Nedenstående meddelelse modtages fra serveren #####################| ---------------------------------
Hej klient [IP-adresse: 192.168.1.102],
** Velkommen til server **
-Server
| ---------------------------------
Trin7: Gå nu til B_server og se efter nedenstående output
Filen er kopieretServer lukkede forbindelsen
Trin 8: Der skal være et filnavn recv.txt ved servermappe. Indholdet af denne recv.txt skal være den samme prøve.txt.
Så vi har med succes kopieret en fil fra klient til server over netværk via python-program.
Kode forklaringer:
Der er to python-filer server.py og klient.py.
Bemærk, at vi forklarer en gang, om en kode er den samme inden i serveren.py og klient.py.
- server.py:
Dette er shebang-linje, hvilket som standard betyder denne server.py skal bruge python3. Lad os se en fordel ved denne linje.
Vi har udført serveren.py eller klient.py ligesom python3 <.py file name>. Nu uden at bruge python3 kan vi udføre python-filen. Følg nedenstående kommandoer
Gå til superbruger-tilstand:
suGiv al tilladelse til .py-fil:
chmod 777 server.pyKør server.py:
./ server.py importstikImporterer stikkontaktbibliotek til python-programmet, mens vi går
at bruge stikkontakt til tilslutning.
s = stikkontakt.stikkontakt ()
Vi skaber et objekt “S” for at få adgang til alle metoder til stikkontakt. Dette er et OOP-koncept.
PORT = 9898Nu vælger vi en port, hvor serveren skal lytte. Vi kan bruge ikke-reserveret port i stedet for dette.
s.bind ((", PORT))Vi bruger bindemetode til at binde server-ip-adresse til den port [9898]. En observation er, at vi kunne have brugt nøjagtig IP-adresse på serveren i stedet for det første argument for bindemetoden, men vi vælger at lade være tomme, da dette fungerer fint.
s.bind ((IP-adresse, PORT))fil = åben ("recv.txt "," wb ")
Vi har åbnet et filnavn “recv.txt ”i server til skrivetilstand og fik filmarkør. Dette er nødvendigt, da vi skal kopiere en tekstfil fra klienten.
mens det er sandt:Lad os starte en uendelig mens loop, da serverens job er at vente, indtil en klient kommunikerer med serveren på den 9898-port. Så dette mens loop er påkrævet.
conn, addr = s.acceptere()Denne kode skal acceptere enhver indgående forbindelsesanmodning fra klienten. Conn bruger “forbinde ” at kommunikere med klienten og “Addr” er IP-adressen på en klient, der har sendt anmodning om oprør til denne server på port 9898.
msg = "\ n \ n | --------------------------------- | \ n Hej klient [IP-adresse:"+ addr [0] +"], \ n ** Velkommen til Server ** \ n -Server \ n
| --------------------------------- | \ n \ n \ n "
Denne kode er til at oprette en besked, der skal sendes til klienten. Denne meddelelse skal udskrives på klientterminalen. Dette bekræfter, at klienten er i stand til at kommunikere med serveren.
tilslutning.send (msg.kode ()Nu har vi beskeden klar, og send den derefter til klienten ved hjælp af den "Conn". Denne kode sender faktisk besked til klienten.
RecvData = tilslutning.recv (1024)Denne kode modtager alle data, der sendes fra klientsiden. I vores tilfælde forventer vi indholdet af prøven.tekst i “RecvData”.
mens RecvData:Én mere loop med betingelse RecvData er ikke tom. I vores tilfælde er det ikke tomt.
fil.skriv (RecvData)Når vi har indhold inde “RecvData” så skriver vi til den fil “Recv.txt ” ved hjælp af filmarkøren "fil".
RecvData = tilslutning.recv (1024)Igen forsøger at modtage, hvis der er data fra klienten. Enkelt gang “RecvData” har ingen data, koden vil bryde while-sløjfen.
fil.tæt()Dette lukker bare filmarkøren, når vi er færdige med filskrivning.
tilslutning.tæt()Dette lukker forbindelsen med klienten.
pauseDette er at komme ud fra uendelig mens loop på B_server.
- klient.py:
Import af sys-bibliotek, som vi vil bruge argumentfacilitet i python.
hvis (len (sys.argv)> 1):ServerIp = sys.argv [1]
andet:
print ("\ n \ n Kør som \ n python3-klient.py < serverip address > \ n \ n ")
udgang (1)
Når vi videregiver IP-adressen til B_server efter filnavnet klient.py mens du kører, er vi nødt til at fange serverens IP-adresse inde i klienten.
... hvis (len (sys.argv)> 1): => For at sikre, at brugeren videregiver mindst et argument som IP-adresse og fanger den IP-adresse insdie “ServerIP”.
Hvis brugeren ikke videregiver mindst en argumentkode, viser hjælp og kommer ud af koden.
PORT = 9898Dette skal være den samme port som nævnt på B_server-siden.
s.Opret forbindelse ((ServerIp, PORT))Denne kode udfører TCP-forbindelse til server-IP med den port. Alt galt på denne ponint resulterer i fejl i forbindelse.
file = open ("prøve.txt "," rb ")Vi åbner ”prøve.txt ”i læsetilstand for kun at læse indhold.
SendData = fil.læse (1024)Læse indholdet af filen og sætte ind “SendData ” variabel.
mens SendData:Vi starter en mens loop, hvis “SendData ” har data. I vores tilfælde hvis “prøve.txt ”er ikke tom, den skal have data.
s.send (SendData)Nu kan vi sende indhold af "prøve.txt ” til server ved hjælp af socket-objekt “S”.
SendData = fil.læse (1024)Læser igen, hvis der er noget tilbage. Så der vil ikke være noget at læse fra filen “SendData” vil være tom, og den kommer ud fra mens loop.
s.tæt()Dette lukker ikke forbindelsen fra klientsiden.
Ubuntu Screenshots Server side
Ubuntu Screenshots på klientsiden
Testede kombinationer:
- Linux som server og Linux som klient: PASS
- Linux som klient og Linux som server: PASS
- Linux som server og Windows10 som klient: PASS
- Linux som klient og Windows10 som server: PASS
Anbefalingen er at bruge to Linux-systemer til server og klient.
Forventede fejl:
- Du kan se nedenstående fejl, hvis serveren ikke kører på 9898-porten
Traceback (seneste opkald sidst):
Fil "klient.py ", linje 22, is.Opret forbindelse ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Forbindelse nægtet
- Nedenfor vises fejl, hvis IP-adressen ikke sendes på klientsiden
Kør som
python3-klient.py < serverip address >- Nedenfor vises fejl, hvis 1St argument på klientsiden er ikke en IP-adresse
Traceback (seneste opkald sidst):
Fil "klient.py ", linje 22, is.Opret forbindelse ((ServerIp, PORT))
stikkontakt.gaierror: [Errno -2] Navn eller tjeneste kendes ikke
- Nedenfor vises fejl, hvis port bruges som 98980
Traceback (seneste opkald sidst):
Fil "klient.py ", linje 22, is.Opret forbindelse ((ServerIp, PORT))
OverflowError: getsockaddrarg: port skal være 0-65535.
- Nedenfor vises fejl, hvis “prøve.txt ”er ikke til stede på klientsiden.
Traceback (seneste opkald sidst):
Fil "klient.py ", linje 25, ifile = open ("prøve.txt "," rb ")
FileNotFoundError: [Errno 2] Ingen sådan fil eller katalog: 'prøve.txt '
Konklusion:
Ved hjælp af dette program kan vi sende en simpel tekstfil fra et system til et andet system via netværk ved hjælp af python-program. Dette giver os grundlæggende læring af python- og sokkelprogrammering også til afsendelse af data over netværket.