Ipadala ang Python Socket File Transfer

Python Socket File Transfer Send



Ang hangarin ng artikulong ito ay upang malaman kung paano maglipat ng isang text file sa network sa pamamagitan ng python program . Ang paglilipat ng file na ito ay batay sa modelo ng server client upang magamit ang socket programming sa python3 +.

Narito ang pangunahing diagram ng pag-set up upang patakbuhin ang program na ito.









Para sa pagiging simple tatawagin namin ang System A bilang A_client at System B bilang B_server sa buong artikulo.



Mga kinakailangan sa file:

Kailangan namin server.py at ang file na ito ay dapat naroroon sa server system. Sa aming kaso ang server.py ay dapat nasa B_server system.





Isa pang dalawang mga file kliyente.py at sample.txt dapat ay naroroon sa system ng client. Sa aming kaso ang dalawang mga file ay dapat na naroroon sa A_client system.

Mga palagay:

Narito ang mga palagay:



  • Dapat ay mayroon kaming dalawang mga system ng Linux na may pag-access sa terminal.
  • Mas kanais-nais na lasa ng Linux ay Ubuntu .
  • Ang Python3 ay dapat na mai-install.
  • Ang parehong mga system ng Linux ay dapat na makapag-ping sa bawat isa. Gamitin ping utos na suriin ang ping.
  • Ang isang system ay dapat kumilos bilang Server at iba pang system ay dapat kumilos bilang kliyente sa isang partikular na oras.

Mga Limitasyon:

Bago tayo magpatuloy sa karagdagang dapat nating malaman na may ilang mga limitasyon sa program na ito.

  • Ang Python3 + ay dapat na mai-install upang patakbuhin ang program na ito. Maaari mong obserbahan ang error o iba't ibang pag-uugali kung tatakbo sa python na mas lumang mga bersyon.
  • Ang text file lamang ang maaaring mailipat sa pamamagitan ng program na ito hanggang ngayon. Anumang iba pang format file na walang nilalaman na teksto ay maaaring mabigo.
  • Pangunahing mga pagbubukod ng programa ang hinawakan sa programa.
  • Ang programa ay maaaring tumakbo sa ibang OS kaysa sa Ubuntu.
  • Ang teksto ng file ay dapat na maikli sa panig ng kliyente dahil ginamit ang laki ng buffer na 1024 bytes.

I-set up ang mga kinakailangan:

  • Kailangan namin ng kahit isang Linux system upang subukan ang program na ito. Ngunit ang rekomendasyon ay ang paggamit ng dalawang magkakaibang mga system ng Linux na konektado sa pamamagitan ng network.
  • Dalawang mga system ang dapat na konektado sa pamamagitan ng Ethernet o Wi-Fi o anumang iba pang mga koneksyon.

Source Code ng Server:

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

Source Code ng kliyente:

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

Paano magpatakbo ng mga programa at inaasahang output:

Narito ang mga hakbang upang maipatupad ang programa.

Step1: Pumunta sa B_server system at magbukas ng isang terminal. Short cut upang buksan ang isang terminal ay Alt + Ctrl + t.

Hakbang2: Pumunta ngayon sa landas kung saan naroroon ang server.py.

Step3: Patakbuhin ngayon ang server.py tulad ng sa ibaba

server ng python3.py

Hindi dapat magkaroon ng anumang mga error at dapat mong makita sa ibaba ang mga kopya

Ang server ay nakalista sa port: 9898

Ang nakopyang pangalan ng file ay recv.txt sa server side

Step4: Buksan ang terminal sa A_client system.

Hakbang5: Pumunta sa landas kung saan naroon ang client.py at sample.txt.

Step6: Ngayon patakbuhin ang client.py tulad ng sa ibaba

client ng python3.py <B_server system IP>

Naobserbahan namin na kailangan naming malaman ang IP address ng server. Maaari naming ipatupad sa ibaba ang utos upang malaman ang IP address ng B_server system.

ifconfig

Ngayon ang output ng A_client system ay dapat na ganito

#
| ----------------- |
Kumusta Client[IP address: 192.168.1.102],
** Maligayang Pagdating sa Server **
-Server
| ----------------- |

Step7: Ngayon pumunta sa B_server at hanapin ang sa ibaba output

Matagumpay na nakopya ang file
Sinarado ng server ang koneksyon

Step8: Dapat mayroong isang pangalan ng file na recv.txt sa folder ng server. Ang nilalaman ng recv.txt na ito ay dapat na parehong sample.txt.

Kaya't matagumpay naming nakopya ang isang file mula sa client papunta sa server sa network sa pamamagitan ng python program.

Mga paliwanag sa code:

Mayroong dalawang mga file ng sawa server.py at kliyente.py .

Tandaan na ipapaliwanag namin nang isang beses kung ang anumang code ay pareho sa loob ng server.py at client.py.

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

Ito ang shebang line na nangangahulugang bilang default ang server.py na ito ay dapat gumamit ng python3. Tingnan natin ang isang kalamangan sa linyang ito.

Naipatupad namin ang gusto ng server.py o client.py sawa3. Ngayon nang hindi gumagamit ng python3 maaari nating maisagawa ang python file. Sundin ang mga utos sa ibaba

Pumunta sa super user mode:

nito

Bigyan ang lahat ng pahintulot sa .py file:

chmod777serverpy

Patakbuhin ang server.py:

./server.py angkat socket
Pag-iimportsocketlibrary sa python programbilangpupunta tayo
gamitinsocket para sakoneksyon

s = socket.socket()

Lumilikha kami ng isang bagay s upang ma-access ang lahat ng mga pamamaraan ng socket. Ito ay isang konsepto ng OOPs.

PORT= 9898

Pumili kami ngayon ng isang port kung saan makikinig ang server. Maaari kaming gumamit ng hindi nakalaan na port sa halip na ito.

s.magbigkis((',PORT))

Gumagamit kami ng paraan ng bind upang maiugnay ang server ip address sa port na iyon [9898]. Ang isang pagmamasid ay maaari naming magamit ang eksaktong IP address ng server sa lugar ng unang argumento ng bind method ngunit pinili naming iwanang blangko sa gawaing ito.

s.magbigkis((IP address,PORT))
file = buksan('recv.txt', 'wb')

Binuksan namin ang isang pangalan ng file na recv.txt sa server para sa mode ng pagsulat at nakuha ang pointer ng file. Kinakailangan ito dahil kailangan naming kopyahin ang isang text file mula sa client.

habang Totoo:

Magsimula tayo ng isang walang hanggan habang ang loop bilang trabaho ng server ay maghintay hanggang makipag-usap ang isang client sa server sa port na 9898. Kaya't habang kinakailangan ang loop.

koneksyon,addr=s.tanggapin()

Ang code na ito ay upang tanggapin ang anumang papasok na kahilingan sa koneksyon mula sa client. Gagamitin si Conn koneksyon upang makipag-usap sa kliyente at addr ay ang IP address ng kliyente na nagpadala ng kahilingan sa kaguluhan sa server na ito sa port 9898.

msg= ' n n| ----------------- | nKumusta Client [IP address:
'
+ addr[0]+'], n** Maligayang Pagdating sa Server ** n-Server n
| ----------------- | n n n'

Ang code na ito ay upang lumikha ng isang mensahe upang maipadala sa client. Ang mensahe na ito ay dapat na naka-print sa client terminal. Kinukumpirma nito na nakapag-usap ang client sa server.

koneksyonmagpadala(msg.i-encode())

Nakahanda na namin ang mensahe, at pagkatapos ay ipadala ito sa kliyente gamit ang na koneksyon Ang code na ito ay talagang nagpapadala ng mensahe sa client.

RecvData=koneksyonrecv(1024)

Ang code na ito ay nakakatanggap ng anumang data na ipinadala mula sa panig ng client. Sa aming kaso inaasahan namin ang nilalaman ng sample.txt in RecvData .

habangRecvData:

Isa pa habang ang loop na may kundisyon RecvData ay hindi walang laman. Sa aming kaso hindi ito walang laman.

file.sumulat(RecvData)

Kapag mayroon kaming nilalaman sa loob RecvData pagkatapos ay nagsusulat kami sa file na iyon recv.txt gamit ang file pointer file

RecvData=koneksyonrecv(1024)

Muli na sinusubukang makatanggap kung mayroong anumang data mula sa client. Minsan RecvData ay walang data ang code ay masira ang habang loop.

file.malapit na()

Isasara lamang nito ang file pointer habang tapos na kami sa pagsulat ng file.

koneksyonmalapit na()

Isasara nito ang koneksyon sa client.

pahinga

Ito ay upang lumabas mula sa walang katapusan habang loop sa B_server.

  1. client.py:
angkat sys

Pag-import ng sys library tulad ng nais naming paggamit ng pasilidad ng argument sa sawa.

kung (len(sys.argv) > 1):
Ang ServerIp= sys.argv[1]
iba pa:
mag-print(' n nTumakbo kagaya nclient ng python3.py n n')
labasan(1)

Habang ipinapasa namin ang IP address ng B_server pagkatapos ng file name client.py habang tumatakbo, kailangan naming abutin ang server IP address na iyon sa loob ng client.

… ..If (len (sys.argv)> 1): => Upang matiyak na ang user ay pumasa sa kahit isang argument bilang IP address at mahuli ang IP address na iyon ServerIP.

Kung ang user ay hindi pumasa ng kahit isang argument code ay nagpapakita ng tulong at lumabas mula sa code.

PORT= 9898

Ito ay dapat na parehong port tulad ng nabanggit sa panig ng B_server.

s.kumonekta((Ang ServerIp,PORT))

Ang code na ito ay gagawin koneksyon sa TCP sa server IP na may port na iyon. Anumang mali sa ponint na ito ay nagreresulta sa mga pagkabigo sa koneksyon.

file = buksan('sample.txt', 'rb')

Binubuksan namin ang sample.txt sa read mode upang mabasa lamang ang nilalaman.

SendData= file.basahin(1024)

Pagbasa ng nilalaman ng file at paglalagay sa loob SendData variable.

habangSendData:

Nagsisimula kami ng isa habang loop kung SendData may datos. Sa aming kaso kung ang sample.txt ay walang laman dapat itong magkaroon ng data.

s.magpadala(SendData)

Ngayon ay maaari na kaming magpadala ng nilalaman ng sample.txt sa server gamit ang socket object s.

SendData= file.basahin(1024)

Muli na namang nagbasa kung may natira pa. Kaya't walang babasahin mula sa file SendData ay walang laman at lalabas ito mula sa habang loop.

s.malapit na()

Hindi nito isinasara ang koneksyon mula sa panig ng kliyente.

Ang panig ng Server ng Ubuntu Screenshot

Ubuntu Screenshot panig ng kliyente

Sinubukan ang mga kumbinasyon:

  • Linux bilang server at Linux bilang kliyente: PASS
  • Linux bilang client at Linux bilang server: PASS
  • Linux bilang server at Windows10 bilang kliyente: PASS
  • Linux bilang client at Windows10 bilang server: PASS

Ang rekomendasyon ay ang paggamit ng dalawang mga system ng Linux para sa server at client.

Mga Inaasahang Pagkakamali:

  1. Maaari mong makita ang error sa ibaba kung ang server ay hindi tumatakbo sa 9898 port

Traceback (pinakahuling tawag sa huli):

File'client.py',linya22, sa <modyul>
s.kumonekta((Ang ServerIp,PORT))
ConnectionRefusedError:[Errno111]Hindi tinanggap ang koneksyon
  1. Sa ibaba ang error ay nakikita kung ang IP address ay hindi naipasa sa panig ng client

Tumakbo kagaya

client ng python3.py <IP address ng server>
  1. Ang error sa ibaba ay makikita kung 1stang pagtatalo sa panig ng kliyente ay hindi isang IP address

Traceback (pinakahuling tawag sa huli):

File'client.py',linya22, sa <modyul>
s.kumonekta((Ang ServerIp,PORT))
socket.gaierror:[Errno -2]Pangalanoserbisyohindikilala
  1. Sa ibaba ang error ay nakikita kung ang port ay ginagamit tulad ng 98980

Traceback (pinakahuling tawag sa huli):

File'client.py',linya22, sa <modyul>
s.kumonekta((Ang ServerIp,PORT))
OverflowError: getsockaddrarg: dapat ang port0-65535.
  1. Ang error sa ibaba ay nakikita kung ang sample.txt ay wala sa panig ng client.

Traceback (pinakahuling tawag sa huli):

File'client.py',linya25, sa <modyul>
file = buksan('sample.txt', 'rb')
FileNotFoundError:[Errno2]Walang ganyanfile odirektoryo:'sample.txt'

Konklusyon:

Gamit ang program na ito maaari kaming magpadala ng isang simpleng file ng teksto mula sa isang system patungo sa isa pang system sa pamamagitan ng network na gumagamit ng python program. Nagbibigay ito sa amin ng pangunahing kaalaman sa python at socket program din para sa pagpapadala ng data sa network.