Pengiriman Transfer File Soket Python

Python Socket File Transfer Send

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+.

Berikut adalah diagram set up dasar untuk menjalankan program ini.





Untuk mempermudah kita 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 kami server.py harus di sistem B_server.

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

Asumsi:

Berikut asumsinya:



  • Kita harus memiliki dua sistem Linux dengan akses terminal.
  • Rasa Linux yang disukai adalah Ubuntu .
  • Python3 harus diinstal.
  • Kedua sistem Linux harus dapat melakukan ping satu sama lain. Menggunakan ping perintah untuk memeriksa ping.
  • Satu sistem harus bertindak sebagai Server dan sistem lain harus bertindak sebagai klien pada satu waktu tertentu.

Batasan:

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

  • Python3+ harus diinstal untuk menjalankan program ini. Anda mungkin mengamati kesalahan atau perilaku yang berbeda jika dijalankan pada versi python yang lebih lama.
  • Hanya file teks yang dapat ditransfer melalui program ini untuk saat ini. File format lain yang tidak berisi teks mungkin gagal.
  • Pengecualian pemrograman dasar telah ditangani dalam program.
  • Program mungkin atau mungkin tidak berjalan di OS lain selain Ubuntu.
  • File teks harus pendek di sisi klien karena ukuran buffer 1024 byte telah digunakan.

Menyiapkan persyaratan:

  • Kami membutuhkan setidaknya satu sistem Linux untuk mencoba program ini. Tetapi rekomendasinya adalah menggunakan dua sistem Linux yang berbeda yang terhubung melalui jaringan.
  • Dua sistem harus terhubung melalui Ethernet atau Wi-Fi atau koneksi lainnya.

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

python3 server.py

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

Server terdaftar di port: 9898

Nama file yang disalin akan menjadi recv.txt di sisi server

Langkah4: Sekarang buka terminal di sistem A_client.

Langkah5: Buka jalur tempat client.py dan sample.txt ada.

Langkah6: Sekarang jalankan client.py seperti di bawah ini

klien python3.py <IP sistem B_server>

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

Step8: Seharusnya ada satu nama file recv.txt di folder server. Konten recv.txt ini harus sama dengan sample.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 client.py.

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

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

Kami telah menjalankan server.py atau client.py seperti python3 . Sekarang tanpa menggunakan python3 kita bisa mengeksekusi file python. Ikuti perintah di bawah ini

Pergi ke mode pengguna super:

nya

Berikan semua izin ke file .py:

chmod777server.py

Jalankan server.py:

./server.py impor stopkontak
Pengimporanstopkontakperpustakaan ke dalam program pythonsebagaikita pergi
menggunakanstopkontak untukkoneksi.

S = stopkontak.stopkontak()

Kami sedang membuat objek S untuk mengakses semua metode socket. Ini adalah konsep OOP.

PELABUHAN= 9898

Sekarang kita memilih satu port dimana server akan mendengarkan. Kita dapat menggunakan port yang tidak dipesan sebagai gantinya.

S.mengikat(('',PELABUHAN))

Kami menggunakan metode bind untuk mengikat alamat ip server ke port tersebut [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,PELABUHAN))
mengajukan = membuka('recv.txt', 'wb')

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

ketika 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,tambahan=S.menerima()

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

pesan= ' | ---------------------------------- | Hai Klien[alamat IP:
'
+ tambahan[0]+'], **Selamat datang di Server** -Server
| ---------------------------------- | '

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

samb.mengirim(pesanmenyandi())

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

RecvData=samb.menerima(1024)

Kode ini menerima data apa pun yang dikirim dari sisi klien. Dalam kasus kami, kami mengharapkan konten sample.txt di RecvData .

ketikaRecvData:

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

mengajukan.menulis(RecvData)

Setelah kami memiliki konten di dalamnya RecvData maka kami menulis ke file itu recv.txt menggunakan penunjuk file mengajukan.

RecvData=samb.menerima(1024)

Sekali lagi mencoba menerima jika ada data dari klien. Satu kali RecvData 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.

merusak

Ini untuk keluar dari loop while tak terbatas di B_server.

  1. klien.py:
impor sistem

Mengimport sys library sesuai keinginan kita menggunakan fasilitas argument di python.

jika (len(sistem.argv) > 1):
IP server= sistem.argv[1]
lain:
mencetak(' Jalankan seperti python3 client.py ')
keluar(1)

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

…..if (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.Menghubung((IP server,PELABUHAN))

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

mengajukan = membuka('contoh.txt', 'rb')

Kami membuka sample.txt dalam mode baca untuk membaca konten saja.

Kirim Data= mengajukan.Baca(1024)

Membaca konten file dan memasukkannya ke dalam Kirim Data variabel.

ketikaKirim Data:

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

S.mengirim(Kirim Data)

Sekarang kami dapat mengirim konten contoh.txt ke server menggunakan objek socket S.

Kirim Data= mengajukan.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):

Mengajukan'klien.py',garis22, di dalam <modul>
S.Menghubung((IP server,PELABUHAN))
ConnectionRefusedError:[salah111]Koneksi ditolak
  1. Kesalahan di bawah ini terlihat jika alamat IP tidak diteruskan di sisi klien

Jalankan seperti

klien python3.py <alamat server>
  1. Kesalahan di bawah ini terlihat jika 1NSargumen di sisi klien bukan alamat IP

Traceback (panggilan terakhir terakhir):

Mengajukan'klien.py',garis22, di dalam <modul>
S.Menghubung((IP server,PELABUHAN))
stopkontak.kesalahan:[salah -2]Namaataumelayanibukandiketahui
  1. Di bawah ini terlihat error jika port yang digunakan seperti 98980

Traceback (panggilan terakhir terakhir):

Mengajukan'klien.py',garis22, di dalam <modul>
S.Menghubung((IP server,PELABUHAN))
MeluapError: getockaddrarg: port harus0-65535.
  1. Kesalahan di bawah ini terlihat jika sample.txt tidak ada di sisi klien.

Traceback (panggilan terakhir terakhir):

Mengajukan'klien.py',garis25, di dalam <modul>
mengajukan = membuka('contoh.txt', 'rb')
FileNotFoundError:[salah2]Tidak seperti itumengajukan ataudirektori:'contoh.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.