Piton

Python Socket File Transfer Send

Python Socket File Transfer Send
A cikk célja a tanulás hogyan lehet szöveges fájlt átvinni a hálózaton keresztül a python programon keresztül. Ez a fájlátvitel a kiszolgáló kliens modelljén alapul, hogy a socket programozást használja a python3-ban+.

Alapbeállítás diagram:

Itt található a program futtatásához szükséges alapvető beállítási diagram.

Az egyszerűség kedvéért az A rendszert A_kliensként, B rendszert B_szerverként fogjuk hívni a cikkben.

Fájl követelmények:

Szükségünk van szerver.py és ennek a fájlnak jelen kell lennie a szerver rendszeren. Esetünkben szerver.py-nek a B_szerver rendszeren kell lennie.

További két fájl ügyfél.py és minta.txt jelen kell lennie az ügyfélrendszeren. Esetünkben ennek a két fájlnak jelen kell lennie az A_client rendszeren.

Feltételezések:

Itt vannak a feltételezések:

Korlátozások:

Mielőtt tovább folytatnánk, tudnunk kell, hogy ennek a programnak vannak bizonyos korlátai.

Állítsa be a követelményeket:

Szerver forráskód:

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

Kliens forráskód:

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

A programok futtatása és a várható kimenet:

Itt vannak a program végrehajtásának lépései.

1. lépés: Lépjen a B_server rendszerhez, és nyisson meg egy terminált. Parancsikon a terminál megnyitásához Alt + Ctrl + t.

2. lépés: Most menjen a szerver elérési útjára.py jelen van.

3. lépés: Most futtassa a szervert.py, mint lent

python3 szerver.py

Nem lehetnek hibák, és az alábbi nyomtatványokat kell látnia

A szerver a 9898-as porton szerepel

A másolt fájlnév vissza fog térni.txt a szerver oldalon

4. lépés: Most nyissa meg a terminált az A_client rendszeren.

5. lépés: Menjen arra az útvonalra, ahol az ügyfél.py és minta.txt vannak jelen.

6. lépés: Most futtassa az ügyfelet.py, mint lent

python3 kliens.py

Megfigyeltük, hogy tudnunk kell a szerver IP-címét. Az alábbi parancs végrehajtásával tudjuk tudni a B_server rendszer IP-címét.

ifconfig

Most az A_client rendszer kimenetének ilyennek kell lennie

################## Az alábbi üzenetet a #################### szervertől kaptuk
| --------------------------------- |
Kedves kliens [IP-cím: 192.168.1.102],
** Üdvözöljük a szerveren **
-szerver
| -------------------------------- | |

7. lépés: Most lépjen a B_server oldalra, és keresse meg a kimenet alatti értéket

A fájl másolása sikeresen megtörtént
A szerver lezárta a kapcsolatot

8. lépés: Egy fájlnévnek kell lennie.txt a szerver mappában. Ennek a recv.A txt-nek azonos mintának kell lennie.txt.

Így sikeresen átmásoltunk egy fájlt a kliensről a szerverre a hálózaton keresztül a Python program segítségével.

Kódmagyarázatok:

Két python fájl van szerver.py és ügyfél.py.

Ne feledje, hogy egyszer elmagyarázzuk, ha bármelyik kód megegyezik-e a szerveren belül.py és kliens.py.

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

Ez a shebang vonal, ami alapértelmezés szerint ezt a szervert jelenti.py-nek a python3-at kell használnia. Lássuk ennek a vonalnak az egyik előnyét.

Futtattuk a szervert.py vagy kliens.py like python3 <.py file name>. A python3 használata nélkül végre tudjuk hajtani a python fájlt. Kövesse az alábbi parancsokat

Lépjen szuperfelhasználói módba:

su

Adjon minden engedélyt erre .py fájl:

chmod 777 szerver.py

Futtassa a szervert.py:

./szerver.py import aljzat
A socket könyvtár importálása a python programba, menet közben
hogy a csatlakozóaljzatot használja.
s = aljzat.foglalat()

Készítünk egy objektumot „S” a socket minden módszeréhez való hozzáféréshez. Ez egy OOP koncepció.

KIKÖTŐ = 9898

Most egy portot választunk, ahol a szerver hallgatni fogja. Ehelyett használhatunk nem fenntartott portot.

s.kötés ((", PORT))

Kötési metódust használunk a kiszolgáló ip címének a porthoz való kötésére [9898]. Az egyik megfigyelés szerint használhatnánk a szerver pontos IP-címét a kötési módszer első argumentuma helyett, de úgy döntünk, hogy üresen hagyjuk, mivel ez jól működik.

s.kötés ((IP-cím, PORT))
file = open ("rekv.txt "," wb ")

Megnyitottunk egy fájlnevet „recv.txt ”a szerveren írási módhoz és fájlmutatót kapott. Erre szükség van, mivel egy szöveges fájlt kell átmásolnunk az ügyfélről.

míg True:

Kezdjünk egy végtelen ciklust, mivel a kiszolgáló feladata az, hogy megvárja, amíg az ügyfél kommunikál a kiszolgálóval azon a 9898-as porton. Tehát erre szükség van hurokra.

konn, addr = s.elfogad()

Ez a kód az ügyfél minden bejövő csatlakozási kérelmének elfogadására szolgál. Conn a következőt fogja használni:összekötni ” kommunikálni az ügyféllel és „Addr” annak az ügyfélnek az IP-címe, aki a 9898-as porton felkavarási kérést küldött ennek a szervernek.

msg = "\ n \ n | --------------------------------- | \ n Szia kliens [IP-cím:
"+ addr [0] +"], \ n ** Üdvözöljük a szerveren ** \ n -Kiszolgáló \ n
| --------------------------------- | \ n \ n \ n "

Ez a kód üzenet létrehozására szolgál, amelyet elküldhet az ügyfélnek. Ezt az üzenetet ki kell nyomtatni az ügyfélterminálra. Ez megerősíti, hogy az ügyfél képes kommunikálni a szerverrel.

konn.küldés (msg.kódol())

Most készen áll az üzenet, majd ezzel elküldjük az ügyfélnek „Összekötő”. Ez a kód valóban üzenetet küld az ügyfélnek.

RecvData = konn.recv (1024)

Ez a kód fogad minden olyan információt, amelyet az ügyfél felől küld. Esetünkben a minta tartalmára számítunk.txt be „RecvData”.

míg a RecvData:

Még egy, míg a RecvData feltétellel rendelkező ciklus nem üres. Esetünkben nem üres.

fájl.ír (RecvData)

Ha van tartalom bent „RecvData” akkor arra a fájlra írunk „Recv.txt ” fájlmutatóval „Fájl”.

RecvData = konn.recv (1024)

Ismét megpróbálunk fogadni, ha van-e adat az ügyféltől. Egyszer „RecvData” nincs adat, a kód megszakítja a while ciklust.

fájl.Bezárás()

Ez csak bezárja a fájlmutatót, amint elkészültünk a fájlírással.

konn.Bezárás()

Ez lezárja a kapcsolatot az ügyféllel.

szünet

Ennek a B_server végtelen ciklusából kell kijönnie.

  1. ügyfél.py:
import sys

A sys könyvtár importálása, ha azt akarjuk, használja az argumentum lehetőséget a pythonban.

ha (len (sys.argv)> 1):
ServerIp = sys.argv [1]
más:
print ("\ n \ n Futtassa, mint \ n python3 kliens.py < serverip address > \ n \ n ")
kilépés (1)

Ahogy átadjuk a B_szerver IP-címét a fájlnév ügyfél után.futtatás közben el kell kapnunk a kiszolgáló IP-címét a kliensen belül.

… Ha (len (sys.argv)> 1): => Annak biztosítása, hogy a felhasználó legalább egy argumentumot átadjon IP-címként, és elkapja azt az IP-címet „ServerIP”.

Ha a felhasználó nem ad át legalább egy argumentumkódot, a súgó megjelenik, és kijön a kódból.

KIKÖTŐ = 9898

Ennek meg kell egyeznie a B_szerver oldalon említett porttal.

s.connect ((ServerIp, PORT))

Ez a kód TCP kapcsolatot létesít a kiszolgáló IP-jével az adott porttal. Bármi rossz ebben a pontról kudarcokat eredményez a kapcsolatban.

file = open ("minta.txt "," rb ")

Megnyitjuk a „mintát.txt ”olvasási módban, csak olvasható tartalomhoz.

SendData = fájl.olvasni (1024)

A fájl tartalmának elolvasása és behelyezése “SendData ” változó.

míg a SendData:

Kezdjük az egy-egy ciklust, haSendData ” rendelkezik adatokkal. Esetünkben, ha „minta.txt ”nem üres, rendelkeznie kell adatokkal.

s.küldés (SendData)

Most már elküldhetjük a "minta.txt ” szerverre a socket objektum használatával „S”.

SendData = fájl.olvasni (1024)

Ismét elolvasom, ha van még valami. Tehát nem lesz mit olvasni fájlból „SendData” üres lesz, és kijön a while ciklusból.

s.Bezárás()

Ez nem zárja le a kapcsolatot kliens oldalról.

Az Ubuntu Screenshots Server oldala

Az Ubuntu Screenshots kliens oldala

Tesztelt kombinációk:

  • Linux mint szerver és Linux mint kliens: PASS
  • Linux mint kliens és Linux mint szerver: PASS
  • Linux mint szerver és Windows10 mint kliens: PASS
  • Linux mint kliens és Windows10 mint szerver: PASS

Az ajánlás két Linux rendszer használata szerver és kliens számára.

Várható hibák:

  1. Az alábbi hibaüzenetet láthatja, ha a kiszolgáló nem fut a 9898-as porton

Traceback (a legutóbbi hívás utoljára):

File "kliens.py ", 22. sor, be
s.connect ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] A kapcsolat elutasítva
  1. Az alábbiakban hiba látható, ha az IP-címet nem adják át az ügyfél oldalon

Fuss, mint

python3 kliens.py < serverip address >
  1. Az alábbiakban hiba látható, ha 1utca Az ügyféloldali argumentum nem IP-cím

Traceback (a legutóbbi hívás utoljára):

File "kliens.py ", 22. sor, be
s.connect ((ServerIp, PORT))
foglalat.gaierror: [Errno -2] Név vagy szolgáltatás nem ismert
  1. Az alábbiakban hiba látható, ha a portot használjuk, mint a 98980

Traceback (a legutóbbi hívás utoljára):

File "kliens.py ", 22. sor, be
s.connect ((ServerIp, PORT))
OverflowError: getsockaddrarg: a port értéke 0-65535.
  1. Az alábbiakban hiba látható, ha a „minta.txt ”nincs jelen az ügyfél oldalán.

Traceback (a legutóbbi hívás utoljára):

File "kliens.py ", 25. sor, be
file = open ("minta.txt "," rb ")
FileNotFoundError: [2. hiba] Nincs ilyen fájl vagy könyvtár: 'minta.txt '

Következtetés:

Ennek a programnak a segítségével egy egyszerű szöveges fájlt küldhetünk az egyik rendszerből a másikba a hálózaton keresztül a python program segítségével. Ez lehetővé teszi számunkra a python és a socket programozás alapvető elsajátítását az adatok hálózaton keresztül történő küldéséhez is.

Az FPS-számláló megjelenítése a Linux-játékokban
A Linux játék komoly lendületet kapott, amikor a Valve 2012-ben bejelentette a Linux támogatását a Steam kliensnek és játékaiknak. Azóta sok AAA és in...
Sid Meier Civilization VI letöltése és lejátszása Linuxon
Bevezetés a játékba A Civilization 6 egy modern felvétel a Age of Empires játékok sorozatában bevezetett klasszikus koncepcióra. Az ötlet meglehetősen...
A Doom telepítése és lejátszása Linuxon
Bevezetés a Doom-ba A Doom sorozat a 90-es években keletkezett az eredeti Doom megjelenése után. Azonnali sláger volt, és ettől kezdve a játéksorozat ...