Perustoimintakaavio:
Tässä on perusasetuskaavio tämän ohjelman ajamiseksi.
Yksinkertaisuuden vuoksi kutsumme järjestelmää A nimellä A_client ja järjestelmää B nimellä B_server koko artikkelissa.
Tiedostovaatimukset:
Me tarvitsemme palvelin.py ja tämän tiedoston pitäisi olla läsnä palvelinjärjestelmässä. Meidän tapauksessamme palvelin.py: n tulisi olla B_palvelinjärjestelmässä.
Kaksi muuta tiedostoa asiakas.py ja näyte.txt pitäisi olla läsnä asiakasjärjestelmässä. Meidän tapauksessamme näiden kahden tiedoston pitäisi olla läsnä A_client-järjestelmässä.
Oletukset:
Tässä ovat oletukset:
- Meillä pitäisi olla kaksi Linux-järjestelmää, joilla on päätelaite.
- Edullinen Linux-maku on Ubuntu.
- Python3 tulisi asentaa.
- Molempien Linux-järjestelmien pitäisi pystyä pingata toisiaan. Käyttää ping
komento tarkistaa ping. - Yhden järjestelmän tulisi toimia palvelimena ja toisen järjestelmän toimia asiakkaana kerrallaan.
Rajoitukset:
Ennen kuin jatkat, meidän on tiedettävä, että tällä ohjelmalla on joitain rajoituksia.
- Python3 + on asennettava tämän ohjelman ajamiseksi. Voit havaita virheitä tai erilaista käyttäytymistä, jos suoritat pythonin vanhemmissa versioissa.
- Ainoastaan tekstitiedosto voidaan siirtää tämän ohjelman kautta heti. Mikä tahansa muu tiedostotiedosto, joka ei sisällä tekstiä, voi epäonnistua.
- Perusohjelmointipoikkeukset on käsitelty ohjelmassa.
- Ohjelma voi toimia tai olla käyttämättä muuta käyttöjärjestelmää kuin Ubuntu.
- Tekstitiedoston tulee olla lyhyt asiakkaan puolella, koska puskurikokona on käytetty 1024 tavua.
Määritä vaatimukset:
- Tarvitsemme vähintään yhden Linux-järjestelmän kokeilemaan tätä ohjelmaa. Mutta suositus on käyttää kahta erilaista Linux-järjestelmää, jotka on kytketty verkon kautta.
- Kaksi järjestelmää tulisi yhdistää Ethernet- tai Wi-Fi-yhteyden tai minkä tahansa muun yhteyden kautta.
Palvelimen lähdekoodi:
https: // github.fi / linuxhintcode / websamples / blob / master / python_send_file / server.py
Asiakkaan lähdekoodi:
https: // github.fi / linuxhintcode / websamples / blob / master / python_send_file / client.py
Kuinka ajaa ohjelmia ja odotettu tuotos:
Tässä on vaiheet ohjelman suorittamiseksi.
Vaihe 1: Siirry B_server-järjestelmään ja avaa pääte. Oikopolku päätelaitteen avaamiseksi on Alt + Ctrl + t.
Vaihe 2: Siirry nyt palvelimen polulle.py on läsnä.
Vaihe 3: Suorita nyt palvelin.py kuten alla
python3-palvelin.pyVirheitä ei pitäisi olla, ja sinun pitäisi nähdä alla olevat tulosteet
Palvelin listaa portin: 9898Kopioidun tiedoston nimi on rekv.txt palvelimen puolella
Vaihe 4: Avaa nyt pääte A_client-järjestelmässä.
Vaihe 5: Mene asiakkaan polulle.py ja näyte.txt ovat läsnä.
Vaihe 6: Suorita nyt asiakas.py kuten alla
python3-asiakas.pyOlemme havainneet, että meidän on tiedettävä palvelimen IP-osoite. Voimme suorittaa alla olevan komennon tietääksemme B_server-järjestelmän IP-osoitteen.
ifconfig
Nyt A_client-järjestelmän ulostulon pitäisi olla tällainen
################## Alla oleva viesti vastaanotetaan palvelimelta ###################| --------------------------------- |
Hei asiakas [IP-osoite: 192.168.1.102],
** Tervetuloa palvelimeen **
-Palvelin
| -------------------------------- | |
Vaihe 7: Siirry nyt B_server-palvelimeen ja etsi alla oleva lähtö
Tiedosto on kopioitu onnistuneestiServeri sulki yhteyden
Vaihe 8: Recv-tiedostonimen pitäisi olla yksi.txt palvelinkansiossa. Tämän suosituksen sisältö.txt: n tulee olla sama näyte.txt.
Joten olemme onnistuneesti kopioineet tiedoston asiakkaalta palvelimelle verkon kautta python-ohjelman kautta.
Koodin selitykset:
Python-tiedostoja on kaksi palvelin.py ja asiakas.py.
Huomaa, että selitämme kerran, onko jokin koodi sama palvelimen sisällä.py ja asiakas.py.
- palvelin.py:
Tämä on shebang-linja, mikä tarkoittaa oletusarvoisesti tätä palvelinta.py: n tulisi käyttää python3: ta. Katsotaanpa tämän linjan yksi etu.
Olemme suorittaneet palvelimen.py tai asiakas.py kuten python 3 <.py file name>. Nyt ilman python3: ää voimme suorittaa python-tiedoston. Seuraa alla olevia komentoja
Siirry superkäyttäjätilaan:
suAnna kaikki lupa .py-tiedosto:
chmod 777 -palvelin.pySuorita palvelin.py:
./ palvelin.py tuontipistokeSocket-kirjaston tuominen python-ohjelmaan menossa
käyttää liitäntää liitäntään.
s = pistorasia.pistorasia ()
Olemme luomassa objektia "S" käyttää kaikkia liitäntämenetelmiä. Tämä on OOP-konsepti.
PORTTI = 9898Nyt valitsemme yhden portin, jossa palvelin kuuntelee. Voimme käyttää varaamatonta porttia tämän sijaan.
s.sitoa ((", PORTTI))Sidomme palvelimen ip-osoitteen kyseiseen porttiin sidontamenetelmällä [9898]. Yksi havainto on, että olisimme voineet käyttää palvelimen tarkkaa IP-osoitetta sidontamenetelmän ensimmäisen argumentin sijaan, mutta päätämme jättää tyhjäksi, koska tämä toimii hyvin.
s.sitoa ((IP-osoite, PORTTI))tiedosto = avoin ("rekv.txt "," wb ")
Olemme avanneet yhden tiedostonimen “recv.txt ”palvelimella kirjoitusmoodia varten ja sai tiedostosoittimen. Tämä vaaditaan, koska meidän on kopioitava yksi tekstitiedosto asiakkaalta.
kun taas totta:Aloitetaan yksi ääretön-silmukka palvelimen tehtävänä on odottaa, kunnes asiakas on yhteydessä palvelimeen 9898-portissa. Joten tämä silmukka vaaditaan.
Conn, addr = s.hyväksyä()Tämä koodi hyväksyy kaikki saapuvat yhteyspyynnöt asiakkaalta. Conn käyttääConn ” kommunikoida asiakkaan ja “Addr” on sen asiakkaan IP-osoite, joka on lähettänyt sekoituspyynnön tälle palvelimelle portissa 9898.
msg = "\ n \ n | --------------------------------- | \ n Hei asiakas [IP-osoite:"+ addr [0] +"], \ n ** Tervetuloa palvelimeen ** \ n -Palvelin \ n
| --------------------------------- | \ n \ n \ n "
Tämän koodin tarkoituksena on luoda viesti, joka lähetetään asiakkaalle. Tämä viesti tulee tulostaa asiakaspäätteelle. Tämä vahvistaa, että asiakas pystyy kommunikoimaan palvelimen kanssa.
Conn.lähetä (viesti.koodata ())Nyt viesti on valmis ja lähetämme sen sitten asiakkaalle sitä käyttämällä "Conn". Tämä koodi tosiasiallisesti lähettää viestin asiakkaalle.
RecvData = yhteys.suositella (1024)Tämä koodi vastaanottaa tietoja, jotka lähetetään asiakkaan puolelta. Meidän tapauksessamme odotamme näytteen sisältöä.txt sisään "RecvData".
kun RecvData:Vielä yksi silmukka ehdolla RecvData ei ole tyhjä. Meidän tapauksessamme se ei ole tyhjä.
tiedosto.kirjoita (RecvData)Kun meillä on sisältöä sisällä "RecvData" sitten kirjoitamme siihen tiedostoon “Recv.txt ” käyttämällä tiedoston osoitinta "Tiedosto".
RecvData = yhteys.suositella (1024)Jälleen yritetään vastaanottaa, jos asiakkaalta on tietoja. Kerran "RecvData" ei ole tietoja, koodi rikkoo while-silmukan.
tiedosto.kiinni()Tämä vain sulkee tiedostosoittimen, kun tiedostojen kirjoittaminen on valmis.
Conn.kiinni()Tämä sulkee yhteyden asiakkaaseen.
taukoTämän on tarkoitus tulla ulos B_palvelimen äärettömästä silmukasta.
- asiakas.py:
Tuodaan sys-kirjasto haluamallamme tavalla python-argumenttitoimintoon.
jos (len (sys.argv)> 1):ServerIp = sys.argv [1]
muu:
print ("\ n \ n Suorita kuten \ n python3-asiakas.py < serverip address > \ n \ n ")
poistua (1)
Kun välitämme B_palvelimen IP-osoitteen tiedostonimiohjelman jälkeen.Py käynnissä, meidän on löydettävä palvelimen IP-osoite asiakkaan sisällä.
... jos (len (sys.argv)> 1): => Varmistaaksesi, että käyttäjä välittää ainakin yhden argumentin IP-osoitteeksi ja saa kyseisen IP-osoitteen kiinni "ServerIP".
Jos käyttäjä ei läpäise vähintään yhtä argumenttikoodia, ohje näkyy ja tulee ulos koodista.
PORTTI = 9898Tämän on oltava sama portti kuin B_palvelimen puolella mainittiin.
s.muodosta yhteys ((ServerIp, PORT))Tämä koodi tekee TCP-yhteyden palvelimen IP-osoitteeseen kyseisen portin kanssa. Mikä tahansa väärä tässä ponintissa johtaa epäonnistumiseen yhteydessä.
tiedosto = open ("näyte.txt "," rb ")Avaamme “näytteen.txt ”lukutilassa lukeaksesi vain sisältöä.
SendData = tiedosto.lukea (1024)Tiedoston sisällön lukeminen ja sisällyttäminenLähetä tiedot ” muuttuja.
kun SendData:Aloitamme yhden hetken silmukan, josLähetä tiedot ” on tietoja. Meidän tapauksessamme, jos “näyte.txt ”ei ole tyhjä, sillä pitäisi olla tietoja.
s.lähetä (SendData)Nyt voimme lähettää sisältöä "näyte.txt ” palvelimelle käyttämällä socket-objektia "S".
SendData = tiedosto.lukea (1024)Luen uudelleen, onko mitään jäljellä. Joten ei ole mitään lukea tiedostosta "SendData" on tyhjä ja se tulee ulos while-silmukasta.
s.kiinni()Tämä ei sulje yhteyttä asiakaspuolelta.
Ubuntu-näyttökuvat palvelimen puolella
Ubuntu Screenshots Client -puoli
Testatut yhdistelmät:
- Linux palvelimena ja Linux asiakkaana: PASS
- Linux asiakkaana ja Linux palvelimena: PASS
- Linux palvelimena ja Windows10 asiakkaana: PASS
- Linux asiakkaana ja Windows10 palvelimena: PASS
Suositus on käyttää kahta Linux-järjestelmää palvelimelle ja asiakkaalle.
Odotetut virheet:
- Näet alla olevan virheen, jos palvelin ei ole käynnissä 9898-portissa
Seuranta (viimeisin puhelu viimeisin):
Tiedosto "asiakas.py ", rivi 22, sisääns.muodosta yhteys ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Yhteys hylätty
- Alla oleva virhe näkyy, jos IP-osoitetta ei välitetä asiakaspuolella
Suorita kuten
python3-asiakas.py < serverip address >- Alla oleva virhe näkyy, jos 1st Asiakaspuolen argumentti ei ole IP-osoite
Seuranta (viimeisin puhelu viimeisin):
Tiedosto "asiakas.py ", rivi 22, sisääns.muodosta yhteys ((ServerIp, PORT))
pistorasiaan.gaierror: [Errno -2] Nimeä tai palvelua ei tunneta
- Alla oleva virhe näkyy, jos porttia käytetään kuten 98980
Seuranta (viimeisin puhelu viimeisin):
Tiedosto "asiakas.py ", rivi 22, sisääns.muodosta yhteys ((ServerIp, PORT))
OverflowError: getsockaddrarg: portin on oltava 0-65535.
- Alla oleva virhe näkyy, jos “näyte.txt ”ei ole asiakkaan puolella.
Seuranta (viimeisin puhelu viimeisin):
Tiedosto "asiakas.py ", rivi 25, sisääntiedosto = open ("näyte.txt "," rb ")
FileNotFoundError: [Virhe 2] Ei tällaista tiedostoa tai hakemistoa: 'näyte.txt '
Päätelmä:
Tämän ohjelman avulla voimme lähettää yksinkertaisen tekstitiedoston järjestelmästä toiseen järjestelmään verkon kautta python-ohjelman avulla. Tämä antaa meille perusopetuksen python- ja socket-ohjelmoinnista myös tietojen lähettämiseen verkon kautta.