Her er det grunnleggende oppsettdiagrammet for å kjøre dette programmet.
For enkelhets skyld vil vi kalle system a som a_client og system b som b_server gjennom hele artikkelen.
Filkrav:
Vi trenger server.py og denne filen skal være til stede på serversystemet. I vår case -server.PY skal være på B_server -systemet.
Ytterligere to filer klient.py og prøve.tekst skal være til stede på klientsystemet. I vårt tilfelle skal disse to filene være til stede på A_Client -systemet.
Antagelser:
Her er forutsetningene:
Begrensninger:
Før vi fortsetter videre, bør vi vite at det er noen begrensninger i dette programmet.
Sett opp krav:
Serverkildekode:
https: // github.com/linuxhintcode/websamples/blob/master/python_send_file/server.py
Klientkildekode:
https: // github.com/linuxhintcode/websamples/blob/master/python_send_file/client.py
#!/usr/bin/env python3Hvordan kjøre programmer og forventet produksjon:
Her er trinnene for å utføre programmet.
Trinn1: Gå til B_server -systemet og åpne en terminal. Kortskjæring for å åpne en terminal er Alt+ctrl+t.
Trinn 2: Gå nå banen der serveren.py er til stede.
Trinn3: Kjør nå server.py som nedenfor
Python3 -server.py
Det skal ikke være noen feil, og du bør se nedenfor utskrifter
Serveren oppføres på port: 9898
Kopiert filnavn vil være RECV.txt på serversiden
Trinn 4: Nå åpen terminal på A_Client System.
Trinn: Gå til banen der klienten.py og prøve.txt er til stede.
Trinn 6: Kjør nå klient.py som nedenfor
Python3 -klient.pyVi har observert at vi må kjenne IP -adressen til serveren. Vi kan utføre kommandoen nedenfor for å kjenne IP -adressen til B_server -systemet.
ifconfig
Nå skal utgangen av A_Client -systemet være slik
################# Nedenfor melding mottas fra server #################
| ----------------------------- |
Hei klient [IP -adresse: 192.168.1.102],
** Velkommen til serveren **
-Server
| ----------------------------- |
Trinn 7: Gå nå til B_Server og se etter utdata nedenfor
Filen er kopiert med hell
Serveren lukket tilkoblingen
Trinn 8: Det skal være ett filnavn RECV.txt i servermappen. Innholdet i denne RECV.TXT skal være samme prøve.tekst.
Så vi har kopiert en fil fra klient til server over nettverk gjennom Python -programmet.
Kodeforklaringer:
Det er to Python -filer server.py og klient.py.
Merk at vi vil forklare en gang om noen kode er den samme serveren.py og klient.py.
Dette er Shebang Line som betyr som standard denne serveren.PY skal bruke Python3. La oss se en fordel med denne linjen.
Vi har utført serveren.py eller klient.py som Python3 . Nå uten å bruke Python3 kan vi utføre Python -filen. Følg kommandoer nedenfor
Gå til superbrukermodus:
su
Gi all tillatelse til .PY -fil:
CHMOD 777 -server.py
Kjør server.PY:
./server.pyImportkontakt
Vi lager et objekt “S” For å få tilgang til alle metoder for stikkontakt. Dette er et oops -konsept.
Port = 9898Nå velger vi en port der serveren lytter. Vi kan bruke ikke reservert port i stedet for dette.
s.bind ((", port))Vi bruker BIND -metoden for å binde server -IP -adresse til den porten [9898]. En observasjon er at vi kunne ha brukt eksakt IP -adresse til serveren i stedet for første argument for bindingsmetode, men vi velger å bli tomt, da dette arbeidet bra.
s.Bind ((IP -adresse, port))Vi har åpnet ett filnavn “Recv.txt ”på server for skrivemodus og fikk filpeker. Dette kreves da vi må kopiere en tekstfil fra klienten.
Mens sant:La oss starte en uendelig mens Loop som serverens jobb er å vente til en klient kommuniserer med serveren på den 9898 -porten. Så dette mens sløyfe er påkrevd.
conn, addr = s.aksepterer()Denne koden er å godta enhver innkommende tilkoblingsforespørsel fra klienten. Conn vil bruke “Conn ” å kommunisere med klient og “Addr” er IP -adressen til klienten som har sendt oppstyr til denne serveren på port 9898.
msg = "\ n \ n | ------------------------------------- | \ n hei klient [IP-adresse:Denne koden skal opprette en melding som skal sendes til klienten. Denne meldingen skal skrives ut på klientterminal. Dette bekrefter at klienten er i stand til å kommunisere med serveren.
Conn.Send (MSG.kode ())Nå har vi meldingen klar, og sender den til klienten ved å bruke den “Conn”. Denne koden sender faktisk melding til klienten.
RecvData = Conn.RECV (1024)Denne koden mottar data som sendes fra klientsiden. I vårt tilfelle forventer vi innholdet i prøven.txt in “Recvdata”.
Mens recvdata:En til mens sløyfe med tilstand recvdata er ikke tom. I vårt tilfelle er det ikke tomt.
fil.skriv (recvdata)Når vi har innhold inne “Recvdata” Så skriver vi til den filen “Recv.tekst" Bruke filpeker "fil".
RecvData = Conn.RECV (1024)Igjen prøver å motta hvis det er noen data fra klienten. En gang “Recvdata” har ingen data koden vil bryte mens loopen.
fil.Lukk()Dette vil bare lukke filpekeren når vi er ferdig med filskriv.
Conn.Lukk()Dette vil lukke forbindelsen med klienten.
gå i stykkerDette skal komme ut fra uendelig mens du er sløyfe på B_server.
Importerer SYS -bibliotek som vi vil bruke argumentanlegg i Python.
if (len (sys.argv)> 1):Når vi passerer IP -adresse til B_Server etter klient for filnavn.PY Mens vi kjører, må vi fange den serverens IP -adresse i klienten.
... hvis (len (sys.argv)> 1): => For å sikre at brukeren passerer minst ett argument som IP -adresse og fange den IP -adressen INSDIE “Serverip”.
Hvis brukeren ikke passerer minst en argumentkode, viser hjelp og kommer ut fra kode.
Port = 9898Dette må være samme port som nevnt på B_server -siden.
s.Connect ((Serverip, port))Denne koden vil gjøre TCP -tilkobling til Server IP med den porten. Noe som er galt på dette ponintet, resulterer i feil i forbindelse.
fil = åpen ("prøve.txt "," RB ")Vi åpner “Sample.txt ”i lesemodus for bare å lese innhold.
SendData = fil.Les (1024)Lese innholdet i filen og sette inn "SendData ” variabel.
Mens SendData:Vi begynner en mens du er sløyfe hvis "SendData ” har data. I vårt tilfelle hvis "prøve.txt ”er ikke tomt, det skal ha data.
s.Send (SendData)Nå kan vi sende innhold av "prøve.tekst" til server ved hjelp av socketobjekt “S”.
SendData = fil.Les (1024)Igjen lesing hvis det er noe igjen. Så det vil ikke være noe å lese fra filen “Senddata” vil være tom og det kommer ut fra mens Loop.
s.Lukk()Dette er ikke lukker forbindelsen fra klientsiden.
Ubuntu skjermbilder serverside
Ubuntu skjermbilder klientsiden
Testede kombinasjoner:
Anbefalingen er å bruke to Linux -systemer for server og klient.
Traceback (siste samtale sist):
Fil "klient.py ", linje 22, i
s.Connect ((Serverip, port))
ConnectionRefusedError: [Errno 111] Tilkobling nektet
Løp som
Python3 -klient.py < serverip address >
Traceback (siste samtale sist):
Fil "klient.py ", linje 22, i
s.Connect ((Serverip, port))
stikkontakt.GAIERROR: [Errno -2] Navn eller tjeneste ikke kjent
Traceback (siste samtale sist):
Fil "klient.py ", linje 22, i
s.Connect ((Serverip, port))
Overflowerror: GetsockAddDrarg: Port må være 0-65535.
Traceback (siste samtale sist):
Fil "klient.py ", linje 25, i
fil = åpen ("prøve.txt "," RB ")
FilenotFoundError: [Errno 2] Ingen slik fil eller katalog: 'Eksempel.tekst'
Ved å bruke dette programmet kan vi sende en enkel tekstfil fra ett system til et annet system gjennom nettverk ved hjelp av Python -programmet. Dette gir oss grunnleggende læring av programmering av Python og Socket også for å sende data over nettverket.