Python

Python Socket File Transfer Send

Python Socket File Transfer Send
Hensikten med denne artikkelen er å lære hvordan du overfører en tekstfil over nettverket gjennom python-programmet. Denne filoverføringen er basert på serverklientmodell for å bruke sokkelprogrammering i python3+.

Grunnleggende oppsettdiagram:

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årt tilfelle 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 bør de to filene være til stede på A_client-systemet.

Antagelser:

Her er antagelsene:

Begrensninger:

Før vi går videre, bør vi vite at det er noen begrensninger i dette programmet.

Still opp krav:

Server kildekode:

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

Kildekildekode:

https: // github.no / linuxhintcode / websamples / blob / master / python_send_file / client.py

Slik kjører du programmer og forventet produksjon:

Her er trinnene for å utføre programmet.

Trinn 1: Gå til B_server-systemet og åpne en terminal. Snarvei for å åpne en terminal er Alt + Ctrl + t.

Trinn 2: Gå nå banen der serveren.py er til stede.

Steg 3: Kjør nå serveren.py som nedenfor

python3-server.py

Det skal ikke være noen feil, og du bør se utskriftene nedenfor

Serveren er oppført på port: 9898

Kopierte filnavn vil bli resv.txt på serversiden

Trinn 4: Åpne nå terminalen på A_client-systemet.

Trinn 5: Gå til banen der klienten.py og prøve.txt er til stede.

Trinn 6: Kjør nå klient.py som nedenfor

python3-klient.py

Vi har observert at vi trenger å kjenne IP-adressen til serveren. Vi kan utføre kommandoen nedenfor for å kjenne IP-adressen til B_server-systemet.

ifconfig

Nå skal utdata fra A_client-systemet være slik

#################### Nedenfor mottas meldingen fra serveren ######################
| ---------------------------------
Hei klient [IP-adresse: 192.168.1.102],
** Velkommen til Server **
-Server
| ---------------------------------

Trinn 7: Gå nå til B_server og se etter utdata

Filen er kopiert
Server lukket tilkoblingen

Trinn 8: Det skal være ett filnavn recv.txt i servermappen. Innholdet i denne rekv.txt skal være samme utvalg.tekst.

Så vi har vellykket kopiert en fil fra klient til server over nettverk gjennom python-program.

Kode forklaringer:

Det er to python-filer server.py og klient.py.

Merk at vi vil forklare en gang om noen kode er den samme på serveren.py og klient.py.

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

Dette er shebang line, som standard betyr denne serveren.py skal bruke python3. La oss se en fordel med denne linjen.

Vi har kjørt serveren.py eller klient.py som python3 <.py file name>. Nå uten å bruke python3 kan vi kjøre python-filen. Følg kommandoene nedenfor

Gå til superbrukermodus:

su

Gi all tillatelse til .py-fil:

chmod 777 server.py

Kjør server.py:

./ server.py importkontakt
Importerer stikkontaktbibliotek til python-programmet mens vi skal
å bruke stikkontakt for tilkobling.
s = stikkontakt.stikkontakt()

Vi lager et objekt “S” for å få tilgang til alle metoder for stikkontakt. Dette er et OOP-konsept.

PORT = 9898

Nå velger vi en port der serveren skal lytte. Vi kan bruke ikke reservert port i stedet for dette.

s.bind ((", PORT))

Vi bruker bindemetode for å binde server-ip-adresse til den porten [9898]. En observasjon er at vi kunne ha brukt nøyaktig IP-adresse til serveren i stedet for første argument for bindemetoden, men vi velger å la være tomme da dette fungerer bra.

s.bind ((IP-adresse, PORT))
file = open ("recv.txt "," wb ")

Vi har åpnet ett filnavn “recv.txt ”i server for skrivemodus og fikk filpeker. Dette er nødvendig da vi må kopiere en tekstfil fra klienten.

mens det er sant:

La oss starte en uendelig mens loop fordi serverens jobb er å vente til en klient kommuniserer med serveren på den 9898-porten. Så dette mens løkke er nødvendig.

conn, addr = s.aksepterer()

Denne koden skal godta enhver innkommende tilkoblingsforespørsel fra klienten. Conn vil bruke “Conn ” å kommunisere med klienten og “Addr” er IP-adressen til klienten som har sendt opprørsforespørsel til denne serveren på port 9898.

msg = "\ n \ n | --------------------------------- | \ n Hei klient [IP-adresse:
"+ addr [0] +"], \ n ** Velkommen til server ** \ n -Server \ n
| --------------------------------- | \ n \ n \ n "

Denne koden skal opprette en melding som skal sendes til klienten. Denne meldingen skal skrives ut på klientterminalen. Dette bekrefter at klienten er i stand til å kommunisere med serveren.

tilkobling.send (msg.kode ())

Nå har vi meldingen klar, og deretter sender den til klienten ved hjelp av den “Conn”. Denne koden sender faktisk melding til klienten.

RecvData = tilkobling.recv (1024)

Denne koden mottar data som sendes fra klientsiden. I vårt tilfelle forventer vi innholdet i prøven.tekst i “RecvData”.

mens RecvData:

En til mens loop med tilstanden 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" ved hjelp av filpekeren "fil".

RecvData = tilkobling.recv (1024)

Igjen prøver å motta hvis det er data fra klienten. En gang “RecvData” har ingen data koden vil bryte mens løkken.

fil.Lukk()

Dette lukker bare filpekeren når vi er ferdige med filskriving.

tilkobling.Lukk()

Dette vil lukke forbindelsen med klienten.

gå i stykker

Dette er å komme ut fra uendelig mens loop på B_server.

  1. klient.py:
importer sys

Importerer sys-biblioteket slik vi vil bruke argumentanlegget i python.

if (len (sys.argv)> 1):
ServerIp = sys.argv [1]
ellers:
print ("\ n \ n Kjør som \ n python3-klient.py < serverip address > \ n \ n ")
utgang (1)

Når vi passerer IP-adressen til B_server etter filnavnklienten.mens vi kjører, må vi fange serverens IP-adresse i klienten.

... hvis (len (sys.argv)> 1): => For å sikre at bruker passerer minst ett argument som IP-adresse og fanger IP-adressen “ServerIP”.

Hvis brukeren ikke sender minst en argumentkode, viser hjelp og kommer ut fra koden.

PORT = 9898

Dette må være den samme porten som nevnt på B_server-siden.

s.koble til ((ServerIp, PORT))

Denne koden vil gjøre TCP-tilkobling til server-IP med den porten. Alt galt på denne poninten resulterer i feil i forbindelse.

file = open ("prøve.txt "," rb ")

Vi åpner “prøve.txt ”i lesemodus for å bare lese innhold.

SendData = fil.les (1024)

Leser innholdet i filen og setter inn “SendData ” variabel.

mens SendData:

Vi starter en mens en loop hvis "SendData ” har data. I vårt tilfelle hvis “prøve.txt ”er ikke tom, den skal ha data.

s.send (SendData)

Nå kan vi sende innhold av "prøve.tekst" til server ved hjelp av socket-objekt “S”.

SendData = fil.les (1024)

Les igjen om det er noe igjen. Så det vil ikke være noe å lese fra filen “SendData” vil være tom, og den kommer ut fra loop.

s.Lukk()

Dette lukker ikke forbindelsen fra klientsiden.

Ubuntu Screenshots Server side

Ubuntu Screenshots Client side

Testede kombinasjoner:

  • 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 å bruke to Linux-systemer for server og klient.

Forventede feil:

  1. Du kan se feil under hvis serveren ikke kjører på 9898-porten

Sporing (siste samtale sist):

Fil "klient.py ", linje 22, i
s.koble til ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Tilkobling nektet
  1. Nedenfor vises feil hvis IP-adresse ikke sendes på klientsiden

Løp som

python3-klient.py < serverip address >
  1. Nedenfor vises feil hvis 1St argumentet på klientsiden er ikke en IP-adresse

Sporing (siste samtale sist):

Fil "klient.py ", linje 22, i
s.koble til ((ServerIp, PORT))
stikkontakt.gaierror: [Errno -2] Navn eller tjeneste er ikke kjent
  1. Nedenfor vises feil hvis port brukes som 98980

Sporing (siste samtale sist):

Fil "klient.py ", linje 22, i
s.koble til ((ServerIp, PORT))
OverflowError: getsockaddrarg: port må være 0-65535.
  1. Nedenfor vises feil hvis “prøve.txt ”er ikke til stede på klientsiden.

Sporing (siste samtale sist):

Fil "klient.py ", linje 25, i
file = open ("prøve.txt "," rb ")
FileNotFoundError: [Errno 2] Ingen slik fil eller katalog: 'prøve.tekst'

Konklusjon:

Ved hjelp av dette programmet kan vi sende en enkel tekstfil fra ett system til et annet system via nettverk ved hjelp av python-program. Dette gir oss grunnleggende læring av python- og socket-programmering også for sending av data over nettverk.

Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...
Mus Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
De siste årene har datamaskiner og operativsystemer utviklet seg sterkt. Det var en tid da brukere måtte bruke kommandoer for å navigere gjennom filad...
Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...