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:
- 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 python versi 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 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
server python3.pySeharusnya tidak ada kesalahan dan Anda akan melihat cetakan di bawah ini
Server terdaftar di port: 9898Nama 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.pyKami 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 disalinServer 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.
- server.py:
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:
suBerikan semua izin untuk .file .py:
chmod 777 server.pyJalankan server.py:
./server.soket impor pyMengimpor 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 = 9898Sekarang 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.
istirahatIni akan keluar dari loop while tak terbatas di B_server.
- klien.py:
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 = 9898Ini 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:
- Anda dapat melihat kesalahan di bawah ini jika server tidak berjalan pada port 9898
Traceback (panggilan terakhir terakhir):
File "klien.py", baris 22, dis.terhubung ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Koneksi ditolak
- Kesalahan di bawah ini terlihat jika alamat IP tidak diteruskan di sisi klien
Jalankan seperti
klien python3.py < serverip address >- Kesalahan di bawah ini terlihat jika 1st argumen di sisi klien bukan alamat IP
Traceback (panggilan terakhir terakhir):
File "klien.py", baris 22, dis.terhubung ((ServerIp, PORT))
stopkontak.gaierror: [Errno -2] Nama atau layanan tidak diketahui
- Di bawah ini terlihat error jika port yang digunakan seperti 98980
Traceback (panggilan terakhir terakhir):
File "klien.py", baris 22, dis.terhubung ((ServerIp, PORT))
OverflowError: getockaddrarg: port harus 0-65535.
- Di bawah kesalahan terlihat jika "sampel".txt” tidak ada di sisi klien.
Traceback (panggilan terakhir terakhir):
File "klien.py", baris 25, difile = 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.