Apa itu Pemrograman Soket dengan Python dan bagaimana cara menguasainya?



Pelajari apa itu Pemrograman Soket dengan Python bersama dengan komunikasi klien-server bersama dengan mentransfer objek python menggunakan acar dan soket.

Internet tidak dapat disangkal telah menjadi 'Jiwa Keberadaan' dan aktivitasnya ditandai dengan 'Koneksi' atau 'Jaringan'. Jaringan ini dimungkinkan dengan menggunakan salah satu dasar terpenting dari Soket. Artikel ini mencakup semua bidang yang berhubungan dengan Pemrograman Soket dengan Python. Soket membantu Anda membuat sambungan ini , tidak diragukan lagi, membuatnya mudah.

Mari kita lihat sekilas semua topik yang dibahas dalam artikel ini:





Mengapa menggunakan Sockets?
Apa itu Sockets di Python?
Bagaimana mencapai Pemrograman Socket dengan Python
Apa itu server?
Apa itu klien?
Echo Client-Server
Komunikasi Ganda
Mentransfer Objek Python



Mengapa menggunakan Sockets?

Soket adalah tulang punggung jaringan. Mereka memungkinkan transfer informasi antara dua program atau perangkat yang berbeda. Misalnya, ketika Anda membuka browser Anda, Anda sebagai klien membuat koneksi ke server untuk transfer informasi.

Sebelum menyelami lebih dalam komunikasi ini, pertama-tama mari kita cari tahu apa sebenarnya soket ini.

Apa Sockets?

Secara umum, soket adalah titik akhir interior yang dibuat untuk mengirim dan menerima data. Jaringan tunggal akan memiliki dua soket, satu untuk setiap perangkat atau program yang berkomunikasi. Soket ini adalah kombinasi dari alamat IP dan Port. Satu perangkat dapat memiliki jumlah soket 'n' berdasarkan nomor port yang digunakan. Port berbeda tersedia untuk jenis protokol berbeda. Lihatlah gambar berikut untuk mengetahui lebih lanjut tentang beberapa nomor port umum dan protokol terkait:



apa itu kopel di java


port umum-SocketProgramminginPython-Edureka

Sekarang Anda sudah jelas tentang konsep soket, sekarang mari kita lihat modul Socket Python:

Cara mencapai Pemrograman Soket dengan Python:

Untuk mencapai Pemrograman Socket dengan Python, Anda perlu mengimpor file stopkontak modul atau . Modul ini terdiri dari metode bawaan yang diperlukan untuk membuat soket dan membantunya terhubung satu sama lain.

Beberapa metode penting adalah sebagai berikut:

MetodeDeskripsi

socket.socket ()

digunakan untuk membuat soket (diperlukan di kedua server serta ujung klien untuk membuat soket)

socket.accept ()

digunakan untuk menerima koneksi. Ini mengembalikan sepasang nilai (samb, alamat) di mana samb adalah objek soket baru untuk mengirim atau menerima data dan alamat adalah alamat soket yang ada di ujung lain koneksi

socket.bind ()

digunakan untuk mengikat ke alamat yang ditentukan sebagai parameter

socket.close ()

digunakan untuk menandai soket sebagai tertutup

socket.connect ()

digunakan untuk menghubungkan ke alamat jarak jauh yang ditentukan sebagai parameter

socket.listen ()

memungkinkan server untuk menerima koneksi

Sekarang Anda telah memahami pentingnya modul soket, mari kita lanjutkan untuk melihat bagaimana itu dapat berfungsi untuk membuat server dan klien untuk Pemrograman Socket di .

Apa itu Server?

Server adalah program, komputer, atau perangkat yang dikhususkan untuk mengelola sumber daya jaringan. Server dapat berada di perangkat atau komputer yang sama atau terhubung secara lokal ke perangkat dan komputer lain atau bahkan jarak jauh. Ada berbagai jenis server seperti server database, server jaringan, server cetak, dll.

Server biasanya menggunakan metode seperti socket.socket (), socket.bind (), socket.listen (), dll untuk membuat koneksi dan mengikat ke klien. Sekarang mari kita tulis program untuk membuat server. Perhatikan contoh berikut:

CONTOH:

import socket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 1234)) #port number bisa apa saja antara 0-65535 (kami biasanya menentukan port non-previleged yang mana > 1023) s.listen (5) while True: clt, adr = s.accept () print (f'Connection to {adr} mapan ') #f string adalah string literal yang diawali dengan f yang # berisi ekspresi python di dalam kurung kurawal clt .send (bytes ('Socket Programming in Python', 'utf-8')) #untuk mengirim info ke clientocket

Seperti yang Anda lihat, kebutuhan pertama untuk membuat soket adalah mengimpor modul soket. Setelah itu metode socket.socket () digunakan untuk membuat soket sisi server.

CATATAN:

AF_INET mengacu pada Alamat dari Internet dan membutuhkan sepasang (host, port) di mana host dapat berupa URL dari beberapa situs web tertentu atau alamatnya dan nomor portnya adalah bilangan bulat. SOCK_STREAM digunakan untuk membuat Protokol TCP.

Metode bind () menerima dua parameter sebagai tuple (host, port). Namun, lebih baik menggunakan nomor port 4 digit karena biasanya nomor port yang lebih rendah sudah terisi. Metode listen () memungkinkan server menerima koneksi. Di sini, 5 adalah antrian untuk beberapa koneksi yang muncul secara bersamaan. Nilai minimum yang dapat ditentukan di sini adalah 0 (Jika Anda memberikan nilai yang lebih rendah, nilainya diubah menjadi 0). Jika tidak ada parameter yang ditentukan, maka diperlukan parameter yang sesuai default.

Itu memungkinkan menerima koneksi selamanya. 'Clt' dan 'adr' adalah objek dan alamat klien. Pernyataan cetak hanya mencetak alamat dan nomor port soket klien. Terakhir, clt.send digunakan untuk mengirim data dalam byte.

Sekarang server kita sudah siap, mari kita lanjutkan ke klien.

Apa itu Klien?

Klien adalah komputer atau perangkat lunak yang menerima informasi atau layanan dari server. Dalam modul klien-server, klien meminta layanan dari server. Contoh terbaik adalah browser web seperti Google Chrome, Firefox, dll. Browser web ini meminta server web untuk halaman web dan layanan yang diperlukan seperti yang diarahkan oleh pengguna. Contoh lain termasuk game online, obrolan online, dll.

Sekarang mari kita lihat cara membuat kode program sisi klien :

CONTOH:

impor soket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2346)) msg ​​= s.recv (1024) print (msg.decode ('utf-8') )

Langkah pertama adalah mengimpor modul soket dan kemudian membuat soket seperti yang Anda lakukan saat membuat server. Kemudian, untuk membuat koneksi antara klien-server Anda perlu menggunakan metode connect () dengan menentukan (host, port).


CATATAN: gethostname digunakan saat klien dan server berada di komputer yang sama. (LAN - localip / WAN - publicip)

Di sini, klien ingin menerima beberapa informasi dari server dan untuk ini, Anda perlu menggunakan metode recv () dan informasi tersebut disimpan dalam pesan variabel lain. Perlu diingat bahwa informasi yang dikirimkan akan dalam byte dan di klien dalam program di atas dapat menerima hingga 1024 byte (ukuran buffer) dalam satu transfer. Ini dapat ditentukan untuk jumlah berapa pun tergantung pada jumlah informasi yang ditransfer.

Akhirnya, pesan yang sedang ditransfer harus diterjemahkan dan dicetak.

Sekarang setelah Anda mengetahui cara membuat program klien-server, mari kita lanjutkan untuk melihat bagaimana program tersebut perlu dijalankan.

Echo Client-Server:

Untuk menjalankan program-program ini, buka command prompt Anda, masuk ke folder tempat Anda membuat program klien dan server Anda dan kemudian ketik:

py server.py (di sini, server.py adalah nama file dari server, Anda juga bisa menggunakan py -3.7 server.py)

Setelah ini selesai, server mulai berjalan. Untuk menjalankan klien, buka jendela cmd lain, dan ketik:

py client.py (di sini, client.py adalah nama file klien)

OUTPUT (SERVER):

(KLIEN)

Mari kita coba program yang sama dengan mengurangi ukuran buffer menjadi 7 dan lihat keluaran apa yang kita dapatkan:

KELUARAN:

Seperti yang Anda lihat, koneksi diakhiri setelah mentransfer 7 byte. Tetapi ini menjadi masalah karena Anda belum menerima informasi lengkap dan koneksi ditutup. Mari kita lanjutkan untuk menyelesaikan masalah ini.

Komunikasi Ganda:

Agar koneksi terus berjalan hingga klien menerima informasi lengkap, Anda dapat menggunakan loop sementara:

CONTOH:

impor soket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2346)) sedangkan True: msg = s.recv (7) print (msg.decode ('utf- 8 '))

Setelah Anda melakukan ini, pesan lengkap akan diterima dalam 7 byte per transfer.

Tapi kali ini, seperti yang Anda lihat, koneksi tidak terputus dan Anda tidak pernah tahu kapan itu akan terjadi. Dan untuk menambahkan ini, bagaimana jika Anda sebenarnya tidak tahu seberapa besar pesan atau informasi yang akan diterima klien dari server. Dalam kasus seperti itu, Anda sebenarnya dapat menggunakan sedikit kode berikut di sisi klien:

CONTOH:

complete_info = '' sedangkan True: msg = s.recv (7) if len (msg)<=0: break complete_info += msg.decode('utf-8') print(complete_info) 

Di sisi server gunakan metode close () sebagai berikut:

clt.close ()

Outputnya akan seperti yang ditunjukkan pada gambar di bawah ini:

KELUARAN:



Semua blok kode di atas lakukan adalah, memeriksa ukuran informasi dan mencetaknya dalam buffer dua byte sekaligus plus menutup koneksi setelah selesai.

Mentransfer Objek Python:

Sampai di sini Anda baru saja mendapatkan kemampuan mentransfer string. Tapi, Pemrograman Socket masuk Python juga memungkinkan Anda untuk mentransfer objek Python juga. Objek ini bisa apa saja seperti set, tupel, kamus, dll. Untuk mencapai ini, Anda perlu mengimpor modul acar Python.

Modul acar Python:

Modul acar Python muncul ketika Anda benar-benar membuat serial atau de-serialisasi objek dengan python. Mari kita lihat contoh kecilnya,

CONTOH:

import acar mylist = [1,2, 'abc'] mymsg = pickle.dumps (mylist) print (mymsg)

KELUARAN: b’x80x03] qx00 (Kx01Kx02Xx03x00x00x00abcqx01e. ’

Seperti yang Anda lihat, pada program di atas, 'mylist' diserialkan menggunakan fungsi dumps () dari modul acar. Juga catat bahwa output dimulai dengan 'b', yang berarti diubah menjadi byte. Dalam pemrograman soket, Anda dapat menerapkan modul ini untuk mentransfer objek python antara klien dan server.

Bagaimana cara menggunakan modul acar untuk mentransfer struktur objek python?

Saat Anda menggunakan acar bersama dengan soket, Anda benar-benar dapat mentransfer apa pun melalui jaringan. Mari tuliskan sisi server dan sisi klien untuk mentransfer daftar dari server ke klien:

Sisi server:

impor soket acar impor a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 2133)) #binding tuple s.listen (5) sedangkan True: clt, adr = s.accept () print (f'Connection ke {adr} didirikan ') m = {1:' Client ', 2:' Server '} mymsg = pickle.dumps (m) # msg yang ingin kami cetak nanti mymsg = {len (mymsg): {a}} 'utf-8') + mymsg clt.send (mymsg)

Di sini, m adalah kamus yang pada dasarnya adalah a yang perlu dikirim dari server ke klien. Ini dilakukan dengan terlebih dahulu membuat serial objek menggunakan dumps () dan kemudian mengubahnya menjadi byte.
Sekarang mari kita tuliskan mitra sisi klien:

Sisi klien:

impor soket impor acar a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2133)) sedangkan True: complete_info = b '' rec_msg = True while True: mymsg = s.recv (10) if rec_msg: print (f'The length of message = {mymsg [: a]} ') x = int (mymsg [: a]) rec_msg = False complete_info + = mymsg if len (complete_info) -a == x: print ('Menerima info lengkap') print (complete_info [a:]) m = pickle.loads (complete_info [a:]) print (m) rec_msg = True complete_info = b '' print (complete_info )

Perulangan while pertama akan membantu kita melacak pesan lengkap (complete_info) serta pesan yang sedang diterima (rec_msg) menggunakan buffer. pesan dengan menyetel rec_
Kemudian, saat pesan diterima, yang saya lakukan hanyalah mencetak setiap bitnya, diterima dalam buffer berukuran 10. Ukuran ini bisa apa saja tergantung pilihan pribadi Anda.

Kemudian, jika pesan yang diterima sama dengan pesan lengkap, saya hanya mencetak pesan sebagai menerima info lengkap berikut yang telah saya de-serialisasi pesan menggunakan load ().

Output dari program di atas adalah sebagai berikut:

bagaimana menjadi insinyur kecerdasan buatan

Ini membawa kita ke akhir artikel ini tentang Pemrograman Soket dengan Python. Saya harap Anda memahami semua konsep dengan jelas.

Pastikan Anda berlatih sebanyak mungkin dan mengembalikan pengalaman Anda.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar di blog 'Pemrograman Soket dengan Python' ini dan kami akan menghubungi Anda kembali secepatnya.

Untuk mendapatkan pengetahuan mendalam tentang Python beserta berbagai aplikasinya, Anda dapat mendaftar secara langsung dengan dukungan 24/7 dan akses seumur hidup.