Python

Pengiriman Transfer File Soket Python

Pengiriman Transfer File Soket Python
Maksud dari artikel ini adalah untuk belajar cara mentransfer file teks melalui jaringan melalui program python. Transfer file ini didasarkan pada model klien server untuk menggunakan pemrograman soket di python3+.

Diagram Pengaturan Dasar:

Berikut adalah diagram pengaturan dasar untuk menjalankan program ini this.

Untuk mempermudah, kami akan memanggil Sistem A sebagai A_client dan Sistem B sebagai B_server di seluruh artikel.

Persyaratan berkas:

Kita butuh server.py dan file ini harus ada di sistem server. Dalam kasus server kami.py harus di sistem B_server.

Dua file lagi klien.py dan Sampel.txt harus ada di sistem klien. Dalam kasus kami, kedua file tersebut harus ada di sistem A_client.

Asumsi:

Berikut asumsinya:

Batasan:

Sebelum kita melangkah lebih jauh kita harus tahu bahwa ada beberapa keterbatasan dari program ini.

Menyiapkan persyaratan:

Kode Sumber Server:

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

Kode Sumber Klien:

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

Cara menjalankan program dan output yang diharapkan:

Berikut adalah langkah-langkah untuk menjalankan program.

Langkah1: Buka sistem B_server dan buka terminal. Jalan pintas untuk membuka terminal adalah Alt+Ctrl+t.

Langkah2: Sekarang pergi ke jalur di mana server.py hadir.

Langkah3: Sekarang jalankan server.py seperti di bawah ini

server python3.py

Seharusnya tidak ada kesalahan dan Anda akan melihat cetakan di bawah ini

Server terdaftar di port: 9898

Nama file yang disalin akan diterima.txt di sisi server

Langkah4: Sekarang buka terminal di sistem A_client.

Langkah5: Pergi ke jalur di mana klien.py dan sampel.txt hadir.

Langkah6: Sekarang jalankan klien.py seperti di bawah ini

klien python3.py

Kami telah mengamati bahwa kami perlu mengetahui alamat IP server. Kita dapat menjalankan perintah di bawah ini untuk mengetahui alamat IP sistem B_server.

ifconfig

Sekarang output dari sistem A_client harus seperti ini

################## Pesan di bawah ini diterima dari server #################
|---------------------------------|
Hai Klien[alamat IP: 192.168.1.102],
**Selamat datang di Server**
-Server
|---------------------------------|

Langkah7: Sekarang buka B_server dan cari output di bawah ini

File telah berhasil disalin
Server menutup koneksi

Langkah8: Seharusnya ada satu nama file recv.txt di folder server. Isi dari recv . ini.txt harus sampel yang sama.txt.

Jadi kami telah berhasil menyalin file dari klien ke server melalui jaringan melalui program python.

Penjelasan kode:

Ada dua file python server.py dan klien.py.

Perhatikan bahwa kami akan menjelaskan sekali jika ada kode yang sama di dalam server.py dan klien.py.

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

Ini adalah garis shebang yang berarti secara default server ini.py harus menggunakan python3. Mari kita lihat satu keuntungan dari garis ini.

Kami telah mengeksekusi server.py atau klien.suka python3 <.py file name>. Sekarang tanpa menggunakan python3 kita dapat mengeksekusi file python. Ikuti perintah di bawah ini

Pergi ke mode pengguna super:

su

Berikan semua izin untuk .file .py:

chmod 777 server.py

Jalankan server.py:

./server.soket impor py
Mengimpor perpustakaan soket ke dalam program python saat kita akan
menggunakan soket untuk koneksi.
s = soket.stopkontak()

Kami sedang membuat objek "s" untuk mengakses semua metode soket. Ini adalah konsep OOP.

PELABUHAN = 9898

Sekarang kami memilih satu port di mana server akan mendengarkan. Kami dapat menggunakan port yang tidak dipesan alih-alih ini.

s.mengikat ((", PORT))

Kami menggunakan metode bind untuk mengikat alamat ip server ke port itu [9898]. Satu pengamatan adalah kami dapat menggunakan alamat IP server yang tepat sebagai pengganti argumen pertama metode pengikatan tetapi kami memilih untuk membiarkannya kosong karena ini berfungsi dengan baik.

s.mengikat ((alamat IP, PORT))
file = buka("recv.txt", "wb")

Kami telah membuka satu nama file “recv.txt” di server untuk mode tulis dan dapatkan penunjuk file. Ini diperlukan karena kami harus menyalin satu file teks dari klien.

sementara Benar:

Mari kita mulai satu loop while tak terbatas karena tugas server adalah menunggu sampai klien berkomunikasi dengan server pada port 9898 itu. Jadi loop while ini diperlukan.

samb, addr = s.menerima()

Kode ini untuk menerima permintaan koneksi yang masuk dari klien. Conn akan menggunakan “samb” untuk berkomunikasi dengan klien dan "tambahkan" adalah alamat IP klien yang telah mengirim permintaan keributan ke server ini pada port 9898.

msg = "\n\n|---------------------------------|\n Hai Klien[alamat IP:
"+ addr[0] + "], \n **Selamat datang di Server** \n -Server\n
|---------------------------------|\n \n\n"

Kode ini untuk membuat pesan untuk dikirim ke klien. Pesan ini harus dicetak di terminal klien. Ini menegaskan bahwa klien dapat berkomunikasi dengan server.

samb.kirim(pesan.menyandi())

Sekarang kami memiliki pesan yang siap, dan kemudian mengirimkannya ke klien menggunakan itu "sambungan". Kode ini sebenarnya mengirim pesan ke klien.

RecvData = sambungan.recv(1024)

Kode ini menerima data apa pun yang dikirim dari sisi klien. Dalam kasus kami, kami mengharapkan konten sampel.masuk txt “Data Recv”.

sementara RecvData:

Satu lagi while loop dengan kondisi RecvData tidak kosong. Dalam kasus kami itu tidak kosong.

mengajukan.tulis (RecvData)

Setelah kami memiliki konten di dalamnya “Data Rekv” maka kami menulis ke file itu “terima.txt" menggunakan penunjuk file "mengajukan".

RecvData = sambungan.recv(1024)

Sekali lagi mencoba menerima jika ada data dari klien. Sekali “Data Recv” tidak memiliki data, kode akan memutus loop while.

mengajukan.Menutup()

Ini hanya akan menutup penunjuk file saat kita selesai menulis file.

samb.Menutup()

Ini akan menutup koneksi dengan klien.

istirahat

Ini akan keluar dari loop while tak terbatas di B_server.

  1. klien.py:
sistem impor

Mengimpor perpustakaan sys seperti yang kami inginkan menggunakan fasilitas argumen di python.

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

Saat kami melewati alamat IP B_server setelah nama file klien.py saat menjalankan, kita perlu menangkap alamat IP server itu di dalam klien.

… jika (len(sys.argv) > 1): => Untuk memastikan pengguna melewati setidaknya satu argumen sebagai alamat IP dan menangkap alamat IP itu secara insdie "IP server".

Jika pengguna tidak lulus setidaknya satu kode argumen menunjukkan bantuan dan keluar dari kode.

PELABUHAN = 9898

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

s.terhubung ((ServerIp, PORT))

Kode ini akan melakukan koneksi TCP ke IP server dengan port itu. Apa pun yang salah pada titik ini menghasilkan kegagalan dalam hubungannya.

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

Kami membuka "sampel".txt” dalam mode baca untuk hanya membaca konten.

SendData = file.baca(1024)

Membaca isi file dan memasukkan “Kirim Data” variabel.

sementara SendData:

Kami memulai satu while loop jika “Kirim Data” memiliki data. Dalam kasus kami jika "sampel".txt” tidak kosong, seharusnya ada data.

s.kirim(Kirim Data)

Sekarang kami dapat mengirim konten "Sampel.txt" ke server menggunakan objek socket "s".

SendData = file.baca(1024)

Baca lagi jika ada yang tersisa. Jadi tidak akan ada yang bisa dibaca dari file “Kirim Data” akan kosong dan akan keluar dari while loop.

s.Menutup()

Ini tidak menutup koneksi dari sisi klien.

Tangkapan Layar Ubuntu Sisi Server

Tangkapan Layar Ubuntu Sisi klien

Kombinasi yang diuji:

  • Linux sebagai server dan Linux sebagai klien: LULUS
  • Linux sebagai klien dan Linux sebagai server: LULUS
  • Linux sebagai server dan Windows10 sebagai klien: LULUS
  • Linux sebagai klien dan Windows10 sebagai server: LULUS

Rekomendasinya adalah menggunakan dua sistem Linux untuk server dan klien.

Kesalahan yang Diharapkan:

  1. Anda dapat melihat kesalahan di bawah ini jika server tidak berjalan pada port 9898

Traceback (panggilan terakhir terakhir):

File "klien.py", baris 22, di
s.terhubung ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Koneksi ditolak
  1. Kesalahan di bawah ini terlihat jika alamat IP tidak diteruskan di sisi klien

Jalankan seperti

klien python3.py < serverip address >
  1. Kesalahan di bawah ini terlihat jika 1st argumen di sisi klien bukan alamat IP

Traceback (panggilan terakhir terakhir):

File "klien.py", baris 22, di
s.terhubung ((ServerIp, PORT))
stopkontak.gaierror: [Errno -2] Nama atau layanan tidak diketahui
  1. Di bawah ini terlihat error jika port yang digunakan seperti 98980

Traceback (panggilan terakhir terakhir):

File "klien.py", baris 22, di
s.terhubung ((ServerIp, PORT))
OverflowError: getockaddrarg: port harus 0-65535.
  1. Di bawah kesalahan terlihat jika "sampel".txt” tidak ada di sisi klien.

Traceback (panggilan terakhir terakhir):

File "klien.py", baris 25, di
file = buka("contoh.txt", "rb")
FileNotFoundError: [Errno 2] Tidak ada file atau direktori seperti itu: 'sample.txt'

Kesimpulan:

Dengan menggunakan program ini kita dapat mengirim file teks sederhana dari satu sistem ke sistem lain melalui jaringan menggunakan program python. Ini memberi kita pembelajaran dasar tentang pemrograman python dan soket juga untuk mengirim data melalui jaringan.

5 Produk Mouse Komputer Ergonomis Terbaik untuk Linux
Apakah penggunaan komputer yang lama menyebabkan rasa sakit di pergelangan tangan atau jari Anda?? Apakah Anda menderita persendian yang kaku dan teru...
Cara Mengubah Pengaturan Mouse dan Touchpad Menggunakan Xinput di Linux
Sebagian besar distribusi Linux dikirimkan dengan pustaka "libinput" secara default untuk menangani kejadian input pada sistem. Ini dapat memproses ke...
Petakan ulang tombol mouse Anda secara berbeda untuk perangkat lunak yang berbeda dengan Kontrol Tombol X-Mouse
Mungkin Anda membutuhkan alat yang dapat membuat kontrol mouse Anda berubah dengan setiap aplikasi yang Anda gunakan. Jika demikian, Anda dapat mencob...