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:
- 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 tingkah laku 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 / 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.pySeharusnya tidak ada kesalahan dan anda akan melihat cetakan di bawah
Pelayan disenaraikan di port: 9898Nama 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.pyKami 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 disalinServer 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.
- pelayan.py:
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:
suBeri semua kebenaran untuk .fail py:
pelayan chmod 777.pyJalankan pelayan.py:
./ pelayan.soket import pyMengimport 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 = 9898Sekarang 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.
rehatIni adalah keluar dari gelung sementara tanpa had di B_server.
- pelanggan.py:
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 = 9898Ini 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:
- Anda dapat melihat ralat di bawah jika pelayan tidak berjalan pada port 9898
Jejak balik (panggilan terakhir terakhir):
Fail "pelanggan.py ", baris 22, dalams.sambung ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Sambungan ditolak
- Kesalahan di bawah ini dapat dilihat jika alamat IP tidak dihantar di sisi pelanggan
Berlari seperti
pelanggan python3.py < serverip address >- Kesalahan di bawah ini dilihat jika 1st hujah di pihak pelanggan bukan alamat IP
Jejak balik (panggilan terakhir terakhir):
Fail "pelanggan.py ", baris 22, dalams.sambung ((ServerIp, PORT))
soket.gaierror: [Errno -2] Nama atau perkhidmatan tidak diketahui
- Kesalahan di bawah ini dilihat jika port digunakan seperti 98980
Jejak balik (panggilan terakhir terakhir):
Fail "pelanggan.py ", baris 22, dalams.sambung ((ServerIp, PORT))
OverflowError: getockaddrarg: port mestilah 0-65535.
- Kesalahan di bawah ini dilihat jika "sampel.txt ”tidak ada di pihak pelanggan.
Jejak balik (panggilan terakhir terakhir):
Fail "pelanggan.py ", baris 25, dalamfail = 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.