Python

Python Socket failu pārsūtīšanas sūtīšana

Python Socket failu pārsūtīšanas sūtīšana
Šī raksta nolūks ir mācīties kā pārsūtīt teksta failu tīklā, izmantojot python programmu. Šī failu pārsūtīšana ir balstīta uz servera klienta modeli, lai python3 izmantotu ligzdu programmēšanu+.

Pamata iestatīšanas shēma:

Šeit ir pamata iestatīšanas shēma, lai palaistu šo programmu.

Vienkāršības labad visā rakstā sistēma A sauksim par A_client un sistēmu B par B_server.

Faila prasības:

Mums vajag serveris.py un šim failam jābūt servera sistēmā. Mūsu gadījumā serveris.py jābūt B_servera sistēmā.

Vēl divi faili klients.py un paraugs.txt jābūt klāt klientu sistēmā. Mūsu gadījumā šiem diviem failiem vajadzētu būt A_client sistēmā.

Pieņēmumi:

Šeit ir pieņēmumi:

Ierobežojumi:

Pirms turpināt darbu, mums jāzina, ka šai programmai ir daži ierobežojumi.

Iestatiet prasības:

Servera pirmkods:

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

Klienta pirmkods:

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

Kā palaist programmas un paredzamo rezultātu:

Šīs ir programmas izpildes darbības.

1. solis: dodieties uz B_servera sistēmu un atveriet termināli. Īss griezums, lai atvērtu termināli, ir Alt + Ctrl + t.

2. solis: Tagad dodieties uz servera ceļu.py ir klāt.

3. solis: Tagad palaidiet serveri.py kā zemāk

python3 serveris.py

Nevajadzētu būt kļūdām, un jums vajadzētu redzēt zemāk izdrukas

Serveris norāda portā: 9898

Nokopētā faila nosaukums būs rekvizīts.txt servera pusē

4. solis: Tagad atveriet terminālu A_client sistēmā.

5. solis: dodieties uz ceļu, kur klients.py un paraugs.txt ir klāt.

6. solis: Tagad palaidiet klientu.py kā zemāk

python3 klients.py

Mēs esam novērojuši, ka mums jāzina servera IP adrese. Mēs varam izpildīt zemāk esošo komandu, lai uzzinātu B_server sistēmas IP adresi.

ifconfig

Tagad A_client sistēmas izejai jābūt šādai

################## Zemāk esošais ziņojums tiek saņemts no servera ###################
| -------------------------------- | |
Sveiki klienti [IP adrese: 192.168. lpp.1.102],
** Laipni lūdzam serverī **
-Serveris
| -------------------------------- | |

7. solis: Tagad dodieties uz B_server un meklējiet zemāku izvadi

Fails ir veiksmīgi nokopēts
Serveris pārtrauca savienojumu

8. solis: Jābūt vienam faila nosaukumam recv.txt servera mapē. Šīs recv.txt jābūt vienādam paraugam.txt.

Tātad mēs esam veiksmīgi nokopējuši failu no klienta uz serveri tīklā, izmantojot python programmu.

Kodu skaidrojumi:

Ir divi pitona faili serveris.py un klients.py.

Ņemiet vērā, ka mēs vienu reizi paskaidrosim, vai servera iekšpusē ir kāds kods.py un klients.py.

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

Šī ir shebang līnija, kas pēc noklusējuma nozīmē šo serveri.py jāizmanto python3. Apskatīsim vienu šīs līnijas priekšrocību.

Mēs esam izpildījuši serveri.py vai klients.py patīk pitons3 <.py file name>. Tagad, neizmantojot python3, mēs varam izpildīt python failu. Izpildiet zemāk norādītās komandas

Pārejiet uz super lietotāja režīmu:

su

Dodiet visu atļauju .py fails:

chmod 777 serveris.py

Palaist serveri.py:

./ serveris.py importa ligzda
Socket bibliotēkas importēšana python programmā, kā mēs turpinām
izmantot pieslēgšanai kontaktligzdu.
s = kontaktligzda.kontaktligzda ()

Mēs veidojam objektu “S” lai piekļūtu visām kontaktligzdas metodēm. Tas ir OOPs jēdziens.

OSTA = 9898

Tagad mēs izvēlamies vienu portu, kurā serveris klausīsies. Tā vietā mēs varam izmantot nerezervētu portu.

s.iesiet ((", PORT))

Mēs izmantojam iesiešanas metodi, lai servera ip adresi saistītu ar šo portu [9898]. Viens novērojums ir tāds, ka mēs varētu izmantot precīzu servera IP adresi saistīšanas metodes pirmā argumenta vietā, bet mēs izvēlamies atstāt tukšu, jo šis darbs ir labs.

s.saistīt ((IP adrese, PORT))
fails = atvērts ("rekv.txt "," wb ")

Mēs esam atvēruši vienu faila nosaukumu “recv.txt ”serverī rakstīšanas režīmam un ieguvis faila rādītāju. Tas ir nepieciešams, jo mums ir jākopē viens teksta fails no klienta.

kamēr patiess:

Sāksim vienu bezgalīgu ciklu, jo servera uzdevums ir gaidīt, kamēr klients sazinās ar serveri šajā 9898 portā. Tātad tas ir nepieciešams cilpa.

savienot, addr = s.pieņemt ()

Šis kods ir paredzēts, lai pieņemtu visus klienta ienākošos savienojuma pieprasījumus. Conn izmantos “savienotājs ” sazināties ar klientu un “Addr” ir tā klienta IP adrese, kurš ir nosūtījis satraukuma pieprasījumu šim serverim portā 9898.

msg = "\ n \ n | --------------------------------- | \ n Sveiks klients [IP adrese:
"+ addr [0] +"], \ n ** Laipni lūdzam serverī ** \ n -Serveris \ n
| --------------------------------- | \ n \ n \ n "

Šis kods ir paredzēts, lai izveidotu ziņojumu, kuru nosūtīt klientam. Šis ziņojums jāizdrukā uz klienta termināļa. Tas apstiprina, ka klients spēj sazināties ar serveri.

savien.sūtīt (ziņ.kodēt ())

Tagad mums ir gatavs ziņojums un pēc tam nosūtiet to klientam, izmantojot to “Savienotājs”. Šis kods faktiski nosūta ziņojumu klientam.

RecvData = savienojums.recv (1024)

Šis kods saņem visus datus, kas tiek sūtīti no klienta puses. Mūsu gadījumā mēs sagaidām parauga saturu.txt “RecvData”.

kamēr RecvData:

Vēl viena cilpa ar nosacījumu RecvData nav tukša. Mūsu gadījumā tas nav tukšs.

failu.rakstīt (RecvData)

Kad mums būs saturs iekšā “RecvData” tad mēs rakstām uz šo failu “Recv.txt ” izmantojot faila rādītāju “Fails”.

RecvData = savienojums.recv (1024)

Atkal mēģinu saņemt, ja ir kādi dati no klienta. Vienreiz “RecvData” nav datu, kods pārtrauks kamēr cilpu.

failu.aizvērt ()

Tas vienkārši aizvērs faila rādītāju, jo mēs esam pabeiguši ar faila rakstīšanu.

savien.aizvērt ()

Tas pārtrauks savienojumu ar klientu.

pārtraukums

Tam jānāk no bezgalīga, kamēr cilpa pie B_servera.

  1. klients.py:
importa sys

Importējot sys bibliotēku, kā mēs vēlamies, izmantojiet argumentu iespēju pitonā.

ja (len (sys.argv)> 1):
ServerIp = sys.argv [1]
cits:
print ("\ n \ n Palaist kā \ n python3 klients.py < serverip address > \ n \ n ")
izeja (1)

Kad mēs nododam B_server IP adresi pēc faila nosaukuma klienta.palaišanas laikā mums ir jānoķer šī servera IP adrese klienta iekšienē.

... ja (len (sys.argv)> 1): => Lai pārliecinātos, ka lietotājs nodod vismaz vienu argumentu kā IP adresi, un notveriet šo IP adresi “ServerIP”.

Ja lietotājs neiztur vismaz vienu argumenta kodu, tiek parādīta palīdzība un iziet no koda.

OSTA = 9898

Tai jābūt tai pašai ostai, kas minēta B_servera pusē.

s.izveidot savienojumu ((ServerIp, PORT))

Šis kods veiks TCP savienojumu ar servera IP ar šo portu. Kaut kas nepareizs šajā ponintā ir saistīts ar neveiksmēm.

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

Mēs atveram “paraugu.txt ”lasīšanas režīmā, lai lasītu tikai saturu.

SendData = fails.lasīt (1024)

Faila satura lasīšana un ievietošana “SendData ” mainīgais.

kamēr SendData:

Mēs sākam vienu ciklu, ja “SendData ” ir dati. Mūsu gadījumā, ja “paraugs.txt ”nav tukšs, tajā jābūt datiem.

s.nosūtīt (SendData)

Tagad mēs varam nosūtīt saturu “Paraugs.txt ” uz serveri, izmantojot ligzdas objektu “S”.

SendData = fails.lasīt (1024)

Atkal lasu, vai ir kas palicis pāri. Tātad no faila nebūs ko lasīt “SendData” būs tukšs, un tas iznāks no while loop.

s.aizvērt ()

Tas nenozīmē savienojumu no klienta puses.

Ubuntu ekrānuzņēmumi servera pusē

Ubuntu ekrānuzņēmumi klienta pusē

Pārbaudītas kombinācijas:

  • Linux kā serveris un Linux kā klients: PASS
  • Linux kā klients un Linux kā serveris: PASS
  • Linux kā serveris un Windows10 kā klients: PASS
  • Linux kā klients un Windows10 kā serveris: PASS

Ieteicams serverim un klientam izmantot divas Linux sistēmas.

Paredzamās kļūdas:

  1. Zemāk redzat kļūdu, ja serveris nedarbojas 9898 portā

Traceback (pēdējais zvans pēdējais):

Fails "klients.py ", 22. rinda, iekšā
s.izveidot savienojumu ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Savienojums tika noraidīts
  1. Zemāk redzama kļūda, ja klienta pusē netiek nodota IP adrese

Skrien kā

python3 klients.py < serverip address >
  1. Zemāk redzama kļūda, ja 1sv arguments klienta pusē nav IP adrese

Traceback (pēdējais zvans pēdējais):

Fails "klients.py ", 22. rinda, iekšā
s.izveidot savienojumu ((ServerIp, PORT))
kontaktligzda.gaierror: [Errno -2] Nosaukums vai pakalpojums nav zināms
  1. Zemāk redzama kļūda, ja ports tiek izmantots, piemēram, 98980

Traceback (pēdējais zvans pēdējais):

Fails "klients.py ", 22. rinda, iekšā
s.izveidot savienojumu ((ServerIp, PORT))
OverflowError: getsockaddrarg: portam ir jābūt 0-65535.
  1. Zemāk redzama kļūda, ja “paraugs.txt ”klienta pusē nav.

Traceback (pēdējais zvans pēdējais):

Fails "klients.py ", 25. rinda, iekšā
file = open ("paraugs.txt "," rb ")
FileNotFoundError: [2. kļūda] Nav šāda faila vai direktorija: 'paraugs.txt '

Secinājums:

Izmantojot šo programmu, mēs varam nosūtīt vienkāršu teksta failu no vienas sistēmas uz citu sistēmu caur tīklu, izmantojot python programmu. Tas dod mums pamata zināšanas par pitonu un ligzdu programmēšanu arī datu sūtīšanai tīklā.

Kā mainīt peles rādītāja un kursora izmēru, krāsu un shēmu operētājsistēmā Windows 10
Peles rādītājs un kursors operētājsistēmā Windows 10 ir ļoti svarīgi operētājsistēmas aspekti. To var teikt arī par citām operētājsistēmām, tāpēc pati...
Bezmaksas un atvērtā koda spēļu dzinēji Linux spēļu izstrādei
Šis raksts aptvers bezmaksas un atvērtā koda spēļu motoru sarakstu, kurus var izmantot, lai izstrādātu 2D un 3D spēles Linux. Šādu spēļu dzinēju ir da...
Tomb Raider for Linux apmācība
Tomb Raider ēna ir divpadsmitais papildinājums Tomb Raider sērijai - darbības piedzīvojumu spēļu franšīzei, kuru izveidoja Eidos Montreal. Spēli gan k...