Python

Penghantaran Fail Python Socket Hantar

Penghantaran Fail Python Socket Hantar
Tujuan artikel ini adalah untuk belajar cara memindahkan fail teks melalui rangkaian melalui program python. Pemindahan fail ini berdasarkan model klien pelayan untuk menggunakan pengaturcaraan soket di python3+.

Rajah Penyediaan Asas:

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 pelayan kes kami.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:

Batasan:

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

Tetapkan syarat:

Kod Sumber Pelayan:

https: // github.com / linuxhintcode / websample / blob / master / python_send_file / pelayan.py

Kod Sumber Pelanggan:

https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / pelanggan.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 pelayan.py hadir.

Langkah 3: Sekarang jalankan pelayan.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 diterima.txt di sisi pelayan

Langkah 4: Sekarang buka terminal di sistem A_client.

Langkah 5: Pergi ke jalan di mana pelanggan.py dan contoh.txt hadir.

Langkah 6: Sekarang jalankan pelanggan.py seperti di bawah

pelanggan python3.py

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 fail yang berulang.txt di folder pelayan. Kandungan rekv ini.txt mestilah sama sampel.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 pelayan.py dan pelanggan.py.

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

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

Kami telah melaksanakan pelayan.py atau pelanggan.py suka ular sawa3 <.py file name>. Sekarang tanpa menggunakan python3 kita dapat melaksanakan fail python. Ikuti arahan di bawah

Pergi ke mod pengguna super:

su

Beri semua kebenaran untuk .fail py:

pelayan chmod 777.py

Jalankan pelayan.py:

./ pelayan.soket import py
Mengimport pustaka soket ke dalam program python semasa kita pergi
untuk menggunakan soket untuk sambungan.
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.ikat ((", PORT))

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 ganti argumen pertama kaedah mengikat tetapi kita memilih untuk membiarkan kosong kerana ini berfungsi dengan baik.

s.mengikat ((alamat IP, PORT))
fail = buka ("samb.txt "," wb ")

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

Walaupun Betul:

Mari mulakan satu loop tanpa had kerana tugas pelayan adalah menunggu sehingga pelanggan berkomunikasi dengan pelayan pada port 9898 itu. Oleh itu, gelung sementara ini diperlukan.

samb, addr = 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 pelanggan yang telah menghantar permintaan kekecohan ke pelayan ini di port 9898.

msg = "\ n \ n | --------------------------------- | \ n Hai Pelanggan [alamat IP:
"+ addr [0] +"], \ n ** Selamat Datang ke Pelayan ** \ n -Server \ 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 pesannya, dan kemudian kirimkan 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 mengharapkan kandungan sampel.txt masuk "RecvData".

sementara RecvData:

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

fail.tulis (RecvData)

Sebaik sahaja kita mempunyai kandungan di dalamnya "RecvData" kemudian kita menulis ke fail itu "Samb.txt ” menggunakan penunjuk fail "Fail".

RecvData = samb.recv (1024)

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

fail.tutup ()

Ini akan menutup penunjuk fail seperti yang kita lakukan dengan penulisan fail.

samb.tutup ()

Ini akan memutuskan hubungan dengan pelanggan.

rehat

Ini adalah keluar dari gelung sementara tanpa had di B_server.

  1. pelanggan.py:
import sys

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

sekiranya (len (sys.argv)> 1):
ServerIp = sys.argv [1]
lain:
cetak ("\ n \ n Jalankan seperti \ n klien python3.py < serverip address > \ n \ n ")
jalan keluar (1)

Semasa kami menyampaikan alamat IP B_server selepas nama pelanggan nama.semasa berjalan, kita perlu menangkap alamat IP pelayan di dalam klien.

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

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.sambung ((ServerIp, PORT))

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

fail = buka ("contoh.txt "," rb ")

Kami membuka "sampel.txt ”dalam mod baca untuk membaca kandungan sahaja.

SendData = fail.baca (1024)

Membaca kandungan fail dan memasukkan ke dalam "HantarData ” pemboleh ubah.

semasa SendData:

Kami memulakan satu ketika loop jika "HantarData ” mempunyai data. Dalam kes kami jika "sampel.txt ”tidak kosong, ia mesti mempunyai data.

s.hantar (SendData)

Sekarang kita boleh menghantar kandungan "Sampel.txt ” ke pelayan menggunakan objek soket "S".

SendData = fail.baca (1024)

Sekali lagi membaca sekiranya ada yang tinggal. Jadi tidak akan ada apa-apa untuk dibaca dari fail "SendData" 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 jika pelayan tidak berjalan pada port 9898

Jejak balik (panggilan terakhir terakhir):

Fail "pelanggan.py ", baris 22, dalam
s.sambung ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Sambungan ditolak
  1. Kesalahan di bawah ini dapat dilihat jika alamat IP tidak dihantar di sisi pelanggan

Berlari seperti

pelanggan python3.py < serverip address >
  1. Kesalahan di bawah ini dilihat jika 1st hujah di pihak pelanggan bukan alamat IP

Jejak balik (panggilan terakhir terakhir):

Fail "pelanggan.py ", baris 22, dalam
s.sambung ((ServerIp, PORT))
soket.gaierror: [Errno -2] Nama atau perkhidmatan tidak diketahui
  1. Kesalahan di bawah ini dilihat jika port digunakan seperti 98980

Jejak balik (panggilan terakhir terakhir):

Fail "pelanggan.py ", baris 22, dalam
s.sambung ((ServerIp, PORT))
OverflowError: getockaddrarg: port mestilah 0-65535.
  1. Kesalahan di bawah ini dilihat jika "sampel.txt ”tidak ada di pihak pelanggan.

Jejak balik (panggilan terakhir terakhir):

Fail "pelanggan.py ", baris 25, dalam
fail = buka ("contoh.txt "," rb ")
FileNotFoundError: [Errno 2] Tiada fail atau direktori seperti itu: '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.

Cara Menggunakan Mesin Cheat GameConqueror di Linux
Artikel ini merangkumi panduan mengenai penggunaan mesin cheat GameConqueror di Linux. Ramai pengguna yang bermain permainan di Windows sering menggun...
Emulator Konsol Permainan Terbaik untuk Linux
Artikel ini akan menyenaraikan perisian emulasi konsol permainan popular yang tersedia untuk Linux. Emulation adalah lapisan keserasian perisian yang ...
Distro Linux Terbaik untuk Permainan pada tahun 2021
Sistem operasi Linux telah jauh dari tampilan asal, ringkas dan berasaskan pelayan. OS ini telah berkembang pesat dalam beberapa tahun kebelakangan in...