Penghantaran Fail Python Socket Hantar

Python Socket File Transfer Send



Tujuan artikel ini adalah untuk belajar cara memindahkan fail teks melalui rangkaian melalui program python . Pemindahan fail ini berdasarkan model pelanggan pelayan untuk menggunakan pengaturcaraan soket di python3 +.

Berikut adalah gambarajah asas untuk menjalankan program ini.









Untuk kesederhanaan kami akan memanggil Sistem A sebagai Pelanggan_ dan Sistem B sebagai Penyedia B_server sepanjang artikel.



Keperluan fail:

Kita perlu pelayan.py dan fail ini mesti ada di sistem pelayan. Dalam kes kami server.py harus berada di sistem B_server.





Dua fail lagi pelanggan.py dan contoh.txt harus hadir pada sistem pelanggan. Dalam kes kami, kedua-dua fail tersebut mesti ada di sistem A_client.

Andaian:

Berikut adalah andaiannya:



  • Kita harus mempunyai dua sistem Linux dengan akses terminal.
  • Rasa Linux yang disukai adalah Ubuntu .
  • Python3 harus dipasang.
  • Kedua-dua sistem Linux semestinya dapat saling berpasangan. Gunakan ping arahan untuk memeriksa ping.
  • Satu sistem harus bertindak sebagai Pelayan dan sistem lain harus bertindak sebagai pelanggan pada satu masa tertentu.

Batasan:

Sebelum kita melangkah lebih jauh, kita harus mengetahui bahawa terdapat beberapa batasan program ini.

  • Python3 + harus dipasang untuk menjalankan program ini. Anda mungkin melihat kesalahan atau kelakuan yang berbeza jika dijalankan pada python versi lama.
  • Hanya fail teks yang dapat dipindahkan melalui program ini mulai sekarang. Fail format lain yang tidak mengandungi teks mungkin gagal.
  • Pengecualian pengaturcaraan asas telah dikendalikan dalam program ini.
  • Program mungkin atau mungkin tidak dijalankan pada OS lain selain Ubuntu.
  • Fail teks harus pendek di sisi pelanggan kerana ukuran penyangga 1024 bait telah digunakan.

Tetapkan syarat:

  • Kami memerlukan sekurang-kurangnya satu sistem Linux untuk mencuba program ini. Tetapi cadangannya adalah menggunakan dua sistem Linux yang berbeza yang disambungkan melalui rangkaian.
  • Dua sistem harus dihubungkan melalui Ethernet atau Wi-Fi atau sambungan lain.

Kod Sumber Pelayan:

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

Kod Sumber Pelanggan:

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

Cara menjalankan program dan output yang diharapkan:

Berikut adalah langkah-langkah untuk melaksanakan program.

Langkah 1: Pergi ke sistem B_server dan buka terminal. Jalan pintas untuk membuka terminal adalah Alt + Ctrl + t.

Langkah 2: Sekarang pergi ke jalan di mana server.py hadir.

Langkah 3: Sekarang jalankan server.py seperti di bawah

pelayan python3.py

Seharusnya tidak ada kesalahan dan anda akan melihat cetakan di bawah

Pelayan disenaraikan di port: 9898

Nama fail yang disalin akan dicantumkan di bahagian pelayan

Langkah 4: Sekarang buka terminal di sistem A_client.

Langkah 5: Pergi ke jalan di mana client.py dan sample.txt hadir.

Langkah 6: Sekarang jalankan client.py seperti di bawah

pelanggan python3.py <IP sistem B_server>

Kami telah memperhatikan bahawa kami perlu mengetahui alamat IP pelayan. Kita boleh melaksanakan perintah di bawah ini untuk mengetahui alamat IP sistem B_server.

ifconfig

Sekarang keluaran sistem A_client seharusnya seperti ini

################## Mesej di bawah diterima dari pelayan ##################
| --------------------------------- |
Hai Pelanggan[Alamat IP: 192.168.1.102],
** Selamat Datang ke Pelayan **
-Pelayan
| --------------------------------- |

Langkah 7: Sekarang pergi ke B_server dan cari output di bawah

Fail berjaya disalin
Server menutup sambungan

Langkah 8: Harus ada satu nama file recv.txt di folder pelayan. Kandungan recv.txt ini harus sama sample.txt.

Oleh itu, kami berjaya menyalin fail dari klien ke pelayan melalui rangkaian melalui program python.

Penjelasan kod:

Terdapat dua fail python pelayan.py dan pelanggan.py .

Perhatikan bahawa kami akan menerangkan sekali jika ada kod yang sama di dalam server.py dan client.py.

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

Ini adalah garis shebang yang bermaksud secara default server.py ini harus menggunakan python3. Mari kita lihat satu kelebihan baris ini.

Kami telah melaksanakan seperti server.py atau client.py ular sawa3. Sekarang tanpa menggunakan python3 kita dapat melaksanakan fail python. Ikuti arahan di bawah

Pergi ke mod pengguna super:

itu

Beri semua kebenaran untuk fail .py:

chmod777pelayan.py

Jalankan server.py:

./server.py mengimport soket
Mengimportsoketperpustakaan ke dalam program pythonsebagaikami akan pergi
untuk menggunakansoket untuksambungan.

s = soket.soket()

Kami sedang mencipta objek s untuk mengakses semua kaedah soket. Ini adalah konsep OOP.

PELABUHAN= 9898

Sekarang kita memilih satu port di mana pelayan akan mendengar. Kita boleh menggunakan port yang tidak dikhaskan dan bukannya ini.

s.mengikat(('',PELABUHAN))

Kami menggunakan kaedah bind untuk mengikat alamat ip pelayan ke port tersebut [9898]. Satu pemerhatian ialah kita boleh menggunakan alamat IP pelayan yang tepat sebagai pengganti argumen pertama kaedah mengikat tetapi kita memilih untuk membiarkan kosong kerana ini berfungsi dengan baik.

s.mengikat((alamat IP,PELABUHAN))
fail = buka('recv.txt', 'wb')

Kami telah membuka satu nama file recv.txt di pelayan untuk mod menulis dan mendapat penunjuk fail. Ini diperlukan kerana kita harus menyalin satu fail teks dari pelanggan.

sementara Betul:

Mari kita mulakan satu tanpa henti sementara loop sebagai tugas pelayan adalah menunggu sehingga pelanggan berkomunikasi dengan pelayan di port 9898 itu. Oleh itu, gelung sementara ini diperlukan.

samb,tambah=s.terima()

Kod ini adalah untuk menerima sebarang permintaan sambungan masuk dari pelanggan. Conn akan menggunakan samb untuk berkomunikasi dengan pelanggan dan tambah adalah alamat IP klien yang telah menghantar permintaan kekecohan ke pelayan ini di port 9898.

msg= ' n n| --------------------------------- | nPelanggan Hai [alamat IP:
'
+ addr[0]+'], n** Selamat Datang ke Pelayan ** n-Pelayan n
| --------------------------------- | n n n'

Kod ini adalah untuk membuat mesej untuk dihantar kepada pelanggan. Mesej ini harus dicetak di terminal pelanggan. Ini mengesahkan bahawa pelanggan dapat berkomunikasi dengan pelayan.

samb.hantar(msg.mengekod())

Sekarang kita sudah siapkan pesan, dan kemudian hantarkan kepada pelanggan yang menggunakannya samb. Kod ini sebenarnya menghantar mesej kepada pelanggan.

RecvData=samb.recv(1024)

Kod ini menerima data yang dihantar dari pihak pelanggan. Dalam kes kami, kami menjangkakan kandungan sample.txt dalam RecvData .

sementaraData Recv:

Sekali lagi loop dengan keadaan RecvData tidak kosong. Dalam kes kita ini tidak kosong.

fail.menulis(RecvData)

Sebaik sahaja kita mempunyai kandungan di dalamnya RecvData maka kita menulis ke fail itu recv.txt menggunakan penunjuk fail fail.

RecvData=samb.recv(1024)

Sekali lagi cuba menerima sekiranya ada data dari pelanggan. Sekali RecvData tidak mempunyai data kod akan mematahkan gelung sementara.

fail.tutup()

Ini hanya akan menutup penunjuk fail kerana kita selesai dengan penulisan fail.

samb.tutup()

Ini akan memutuskan hubungan dengan pelanggan.

rehat

Ini adalah keluar dari loop sementara yang tidak terbatas di B_server.

  1. pelanggan.py:
mengimport sys

Mengimport perpustakaan sys kerana kami mahu menggunakan kemudahan argumen di python.

sekiranya (len(sys.berhujah) > 1):
PelayanIp= sys.berhujah[1]
yang lain:
mencetak(' n nBerlari seperti npython3 client.py n n')
jalan keluar(1)

Semasa kami menyampaikan alamat IP B_server setelah nama fail client.py semasa berjalan, kami perlu menangkap alamat IP pelayan di dalam klien.

… ..If (len (sys.argv)> 1): => Untuk memastikan pengguna meneruskan sekurang-kurangnya satu argumen sebagai alamat IP dan menangkap alamat IP tersebut PelayanIP.

Sekiranya pengguna tidak lulus sekurang-kurangnya satu kod argumen menunjukkan pertolongan dan keluar dari kod.

PELABUHAN= 9898

Ini harus menjadi port yang sama seperti yang disebutkan di sisi B_server.

s.menyambung((PelayanIp,PELABUHAN))

Kod ini akan melakukan sambungan TCP ke IP pelayan dengan port tersebut. Apa-apa yang salah pada ponint ini mengakibatkan kegagalan dalam hubungannya.

fail = buka('sample.txt', 'rb')

Kami membuka sample.txt dalam mod baca untuk membaca kandungan sahaja.

HantarData= fail.membaca(1024)

Membaca kandungan fail dan memasukkannya ke dalam HantarData pemboleh ubah.

sementaraHantarData:

Kami memulakan satu ketika loop jika HantarData mempunyai data. Sekiranya contoh.txt tidak kosong, ia mesti mempunyai data.

s.hantar(HantarData)

Sekarang kita boleh menghantar kandungan contoh.txt ke pelayan menggunakan objek soket s.

HantarData= fail.membaca(1024)

Sekali lagi membaca sekiranya ada yang tinggal. Jadi tidak akan ada apa-apa untuk dibaca dari fail HantarData akan kosong dan ia akan keluar dari loop sementara.

s.tutup()

Ini tidak menutup hubungan dari pihak pelanggan.

Bahagian Ubuntu Screenshots Server

Bahagian Pelanggan Screenshot Ubuntu

Gabungan yang diuji:

  • Linux sebagai pelayan dan Linux sebagai pelanggan: LULUS
  • Linux sebagai pelanggan dan Linux sebagai pelayan: LULUS
  • Linux sebagai pelayan dan Windows10 sebagai pelanggan: LULUS
  • Linux sebagai pelanggan dan Windows10 sebagai pelayan: LULUS

Cadangannya adalah menggunakan dua sistem Linux untuk pelayan dan pelanggan.

Kesalahan yang dijangkakan:

  1. Anda dapat melihat ralat di bawah ini sekiranya pelayan tidak berjalan pada port 9898

Jejak balik (panggilan terakhir terakhir):

Fail'pelanggan.py',garisan22, dalam <modul>
s.menyambung((PelayanIp,PELABUHAN))
Ralat Sambungan:[Errno111]Sambungan ditolak
  1. Kesalahan di bawah ini dapat dilihat jika alamat IP tidak dihantar di sisi pelanggan

Berlari seperti

pelanggan python3.py <alamat pelayan>
  1. Kesalahan di bawah ini dilihat jika 1sthujah di pihak pelanggan bukan alamat IP

Jejak balik (panggilan terakhir terakhir):

Fail'pelanggan.py',garisan22, dalam <modul>
s.menyambung((PelayanIp,PELABUHAN))
soket.kesalahan:[Errno -2]Namaatauperkhidmatantidakdikenali
  1. Kesalahan di bawah ini dilihat jika port digunakan seperti 98980

Jejak balik (panggilan terakhir terakhir):

Fail'pelanggan.py',garisan22, dalam <modul>
s.menyambung((PelayanIp,PELABUHAN))
Kesalahan Limpahan: getockaddrarg: port mestilah0-65535.
  1. Kesalahan di bawah ini dilihat jika sample.txt tidak hadir di pihak pelanggan.

Jejak balik (panggilan terakhir terakhir):

Fail'pelanggan.py',garisan25, dalam <modul>
fail = buka('sample.txt', 'rb')
Kesalahan FailNotFound:[Errno2]Tiada seperti itufail ataudirektori:'sample.txt'

Kesimpulan:

Dengan menggunakan program ini kita dapat mengirim fail teks sederhana dari satu sistem ke sistem lain melalui rangkaian menggunakan program python. Ini memberi kita pembelajaran asas pengaturcaraan python dan socket juga untuk menghantar data melalui rangkaian.