Apa itu Pengaturcaraan Socket di Python dan bagaimana menguasainya?



Ketahui apa itu Pengaturcaraan Soket di Python bersama dengan komunikasi pelayan pelanggan dan juga memindahkan objek python menggunakan acar dan soket.

Internet tidak dapat disangkal lagi menjadi 'Jiwa Kehadiran' dan aktivitinya dicirikan oleh 'Sambungan' atau 'Rangkaian'. Jaringan ini dimungkinkan dengan menggunakan salah satu asas terpenting dari Soket. Artikel ini merangkumi semua bidang yang berkaitan dengan Pengaturcaraan Socket di Python. Soket membantu anda membuat sambungan ini, sementara , tidak diragukan lagi, menjadikannya senang.

Mari kita lihat dengan cepat semua topik yang dibahas dalam artikel ini:





Mengapa menggunakan Soket?
Apakah soket di Python?
Cara mencapai Pengaturcaraan Socket di Python
Apa itu pelayan?
Apa itu pelanggan?
Pelayan Pelanggan Echo
Komunikasi Pelbagai
Memindahkan Objek Python



Mengapa menggunakan Soket?

Soket adalah tulang belakang rangkaian. Mereka memungkinkan pemindahan maklumat antara dua program atau peranti yang berbeza. Sebagai contoh, semasa anda membuka penyemak imbas anda, anda sebagai pelanggan membuat sambungan ke pelayan untuk pemindahan maklumat.

Sebelum menyelami komunikasi ini dengan lebih mendalam, mari kita ketahui apa sebenarnya soket ini.

Apa itu soket?

Secara umum, soket adalah titik akhir dalaman yang dibina untuk menghantar dan menerima data. Satu rangkaian akan mempunyai dua soket, satu untuk setiap peranti atau program berkomunikasi. Soket ini adalah gabungan dari alamat IP dan Port. Satu peranti boleh mempunyai bilangan soket 'n' berdasarkan nombor port yang sedang digunakan. Pelabuhan yang berbeza tersedia untuk pelbagai jenis protokol. Lihat gambar berikut untuk mengetahui lebih lanjut mengenai beberapa nombor port biasa dan protokol yang berkaitan:




port biasa-SocketProgramminginPython-Edureka

Setelah anda memahami konsep soket, mari kita lihat modul Socket Python:

Cara mencapai Pengaturcaraan Socket di Python:

Untuk mencapai Pengaturcaraan Socket di Python, anda perlu mengimport soket modul atau . Modul ini terdiri daripada kaedah terbina dalam yang diperlukan untuk membuat soket dan membantu mereka bergaul antara satu sama lain.

Beberapa kaedah penting adalah seperti berikut:

KaedahPenerangan

soket. soket ()

digunakan untuk membuat soket (diperlukan pada kedua pelayan dan juga hujung pelanggan untuk membuat soket)

soket. terima ()

jadual berkala alat devops
digunakan untuk menerima sambungan. Ia mengembalikan sepasang nilai (kon, alamat) di mana kon adalah objek soket baru untuk mengirim atau menerima data dan alamat adalah alamat soket yang ada di hujung sambungan yang lain

socket.bind ()

digunakan untuk mengikat ke alamat yang ditentukan sebagai parameter

socket.close ()

digunakan untuk menandakan soket sebagai ditutup

socket.connect ()

digunakan untuk menyambung ke alamat jauh yang ditentukan sebagai parameter

socket.listen ()

membolehkan pelayan menerima sambungan

Sekarang setelah anda memahami kepentingan modul soket, mari kita lanjutkan untuk melihat bagaimana ia dapat berfungsi untuk membuat pelayan dan klien untuk Pengaturcaraan Soket di .

Apa itu Pelayan?

Pelayan sama ada program, komputer, atau peranti yang dikhaskan untuk mengurus sumber rangkaian. Pelayan boleh menggunakan peranti atau komputer yang sama atau disambungkan secara tempatan ke peranti dan komputer lain atau bahkan jauh. Terdapat pelbagai jenis pelayan seperti pelayan pangkalan data, pelayan rangkaian, pelayan cetak, dll.

Pelayan biasanya menggunakan kaedah seperti socket.socket (), socket.bind (), socket.listen (), dll untuk membuat sambungan dan mengikat pelanggan. Sekarang mari kita menulis program untuk membuat pelayan. Pertimbangkan contoh berikut:

CONTOH:

import socket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 1234)) #port number boleh menjadi antara 0-65535 (biasanya kami tentukan port yang tidak berlaku > 1023) s.listen (5) manakala True: clt, adr = s.accept () print (f'Connection to {adr} found ') #f string adalah rentetan literal yang diawali dengan f yang #mengandungi ungkapan python di dalam braces clt .send (bytes ('Socket Programming in Python', 'utf-8')) #untuk menghantar maklumat ke klien

Seperti yang anda lihat, keperluan pertama untuk membuat soket adalah mengimport modul soket. Selepas itu kaedah socket.socket () digunakan untuk membuat soket sisi pelayan.

CATATAN:

AF_INET merujuk kepada Alamat dari Internet dan memerlukan sepasang (host, port) di mana host boleh menjadi URL dari beberapa laman web tertentu atau alamatnya dan nombor port adalah bilangan bulat. SOCK_STREAM digunakan untuk membuat Protokol TCP.

Kaedah bind () menerima dua parameter sebagai tuple (host, port). Walau bagaimanapun, lebih baik menggunakan nombor port 4 digit kerana yang lebih rendah biasanya diduduki. Kaedah listen () membolehkan pelayan menerima sambungan. Di sini, 5 adalah barisan untuk pelbagai sambungan yang muncul secara serentak. Nilai minimum yang dapat ditentukan di sini adalah 0 (Jika anda memberikan nilai yang lebih rendah, nilai tersebut diubah menjadi 0). Sekiranya tidak ada parameter yang ditentukan, diperlukan parameter yang sesuai.

The membenarkan penerimaan hubungan selama-lamanya. ‘Clt’ dan ‘adr’ adalah objek dan alamat klien. Pernyataan cetak hanya mencetak alamat dan nombor port soket pelanggan. Akhirnya, clt.send digunakan untuk menghantar data dalam bait.

Sekarang pelayan kami sudah siap, mari kita beralih ke arah pelanggan.

Apa itu Pelanggan?

Pelanggan adalah komputer atau perisian yang menerima maklumat atau perkhidmatan dari pelayan. Dalam modul pelayan pelanggan, pelanggan meminta perkhidmatan dari pelayan. Contoh terbaik ialah penyemak imbas web seperti Google Chrome, Firefox, dll. Penyemak imbas web ini meminta pelayan web untuk laman web dan perkhidmatan yang diperlukan seperti yang diarahkan oleh pengguna. Contoh lain termasuk permainan dalam talian, sembang dalam talian, dll.

Sekarang mari kita lihat bagaimana membuat kod program sisi pelanggan :

CONTOH:

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

Langkah pertama adalah mengimport modul soket dan kemudian membuat soket seperti yang anda lakukan semasa membuat pelayan. Kemudian, untuk membuat sambungan antara pelayan klien, anda perlu menggunakan kaedah connect () dengan menentukan (host, port).


CATATAN: gethostname digunakan semasa pelanggan dan pelayan berada di komputer yang sama. (LAN - localip / WAN - publicip)

Di sini, pelanggan ingin menerima beberapa maklumat dari pelayan dan untuk ini, anda perlu menggunakan kaedah recv () dan maklumat tersebut disimpan dalam msg pemboleh ubah lain. Perlu diingat bahawa maklumat yang disampaikan akan berada dalam bait dan pelanggan dalam program di atas dapat menerima hingga 1024 bait (ukuran penyangga) dalam satu pemindahan. Ia dapat ditentukan untuk jumlah apa pun bergantung pada jumlah maklumat yang dipindahkan.

Akhirnya, mesej yang dipindahkan harus disahkod dan dicetak.

Sekarang setelah anda mengetahui bagaimana membuat program pelayan pelanggan, mari kita lanjutkan untuk melihat bagaimana mereka perlu dijalankan.

kod java perduaan hingga perpuluhan

Pelayan Pelanggan Echo:

Untuk melaksanakan program ini, buka command prompt anda, masuk ke folder tempat anda membuat program klien dan pelayan anda dan kemudian ketik:

py server.py (di sini, server.py adalah nama fail pelayan, anda juga boleh menggunakan py -3.7 server.py)

Setelah ini selesai, pelayan mula berjalan. Untuk melaksanakan klien, buka tetingkap cmd yang lain, dan ketik:

py client.py (di sini, client.py adalah nama fail pelanggan)

OUTPUT (SERVER):

(PELANGGAN)

Mari cuba program yang sama dengan mengurangkan ukuran penyangga menjadi 7 dan lihat output apa yang kita dapat:

PENGELUARAN:

Seperti yang anda lihat, sambungan ditamatkan setelah memindahkan 7 bait. Tetapi ini adalah masalah kerana anda belum menerima maklumat lengkap dan sambungan ditutup. Mari kita selesaikan masalah ini.

Pelbagai Komunikasi:

Untuk sambungan berterusan sehingga pelanggan menerima maklumat lengkap, anda boleh menggunakan loop sementara:

CONTOH:

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

Setelah anda melakukan ini, mesej lengkap akan diterima dalam 7 bait setiap pemindahan.

Tetapi kali ini, seperti yang anda lihat, sambungannya tidak dapat ditamatkan dan anda tidak akan tahu bila ia akan berlaku. Dan untuk menambahkannya, bagaimana jika anda sebenarnya tidak tahu seberapa besar mesej atau maklumat yang akan diterima oleh pelanggan dari pelayan. Dalam kes sedemikian, anda sebenarnya boleh menggunakan sedikit kod berikut di pihak pelanggan:

CONTOH:

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

Di sisi pelayan, gunakan kaedah tutup () seperti berikut:

tutup ()

Hasilnya seperti yang ditunjukkan dalam gambar di bawah:

PENGELUARAN:



Semua blok kod di atas adalah, memeriksa ukuran maklumat dan mencetaknya dalam penyangga dua bait sekaligus dan menutup sambungan setelah selesai.

Memindahkan Objek Python:

Sampai di sini anda baru sahaja mendapat kemampuan memindahkan rentetan. Tetapi, Pengaturcaraan Socket di Python juga membolehkan anda memindahkan objek Python juga. Objek-objek ini boleh menjadi seperti set, tupel, kamus, dan lain-lain. Untuk mencapainya, anda perlu mengimport modul acar Python.

Modul Python pickle:

Modul Python pickle muncul dalam gambar ketika anda sebenarnya sedang membuat siri atau menyahsiri objek dalam python. Mari kita lihat contoh kecil,

CONTOH:

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

PENGELUARAN: b'x80x03] qx00 (Kx01Kx02Xx03x00x00x00abcqx01e. '

Seperti yang anda lihat, dalam program di atas, ‘mylist’ bersiri menggunakan fungsi dumps () modul acar. Perhatikan juga bahawa output bermula dengan 'b', yang bermaksud ia ditukar menjadi bait. Dalam pengaturcaraan soket, anda boleh melaksanakan modul ini untuk dipindahkan objek sawa antara pelanggan dan pelayan.

Bagaimana menggunakan modul acar untuk memindahkan struktur objek python?

Apabila anda menggunakan acar bersama soket, anda boleh memindahkan apa sahaja melalui rangkaian. Mari tuliskan sisi pelayan dan rakan pelanggan untuk memindahkan senarai dari pelayan kepada pelanggan:

Sisi Pelayan:

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

Di sini, m adalah kamus yang pada asasnya a yang perlu dihantar dari pelayan ke klien. Ini dilakukan dengan membuat siri objek terlebih dahulu menggunakan dump () dan kemudian menukarnya menjadi bait.
Sekarang mari tulis rakan sejawat pelanggan:

Sisi Pelanggan:

import socket import acar a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2133)) manakala True: complete_info = b 'rec_msg = True while True: mymsg = s.recv (10) if rec_msg: print (f'Panjang mesej = {mymsg [: a]} ') x = int (mymsg [: a]) rec_msg = False complete_info + = mymsg if len (complete_info) -a == x: cetak ('Mendapatkan maklumat lengkap') cetak (complete_info [a:]) m = pickle.loads (complete_info [a:]) print (m) rec_msg = True complete_info = b '' print (complete_info )

Gelung sementara pertama akan membantu kita melacak mesej lengkap (maklumat_ lengkap) serta mesej yang diterima (rec_msg) menggunakan penyangga. mesej dengan menetapkan rec_
Kemudian, semasa mesej diterima, semua yang saya lakukan adalah mencetak setiap bitnya, diterima dalam penyangga ukuran 10. Ukuran ini boleh menjadi apa sahaja bergantung pada pilihan peribadi anda.

Kemudian, jika mesej yang diterima sama dengan mesej yang lengkap, saya hanya mencetak mesej tersebut sebagai maklumat lengkap yang diterima berikut yang telah saya hapus siri pesanan menggunakan banyak ().

Hasil untuk program di atas adalah seperti berikut:

Ini membawa kita ke akhir artikel ini mengenai Pengaturcaraan Soket di Python. Saya harap anda memahami semua konsep dengan jelas.

Pastikan anda berlatih sebanyak mungkin dan kembalikan pengalaman anda.

Ada soalan untuk kami? Sila sebutkan di bahagian komen dari blog 'Socket Programming in Python' ini dan kami akan menghubungi anda secepat mungkin.

Untuk mendapatkan pengetahuan mendalam tentang Python bersama dengan pelbagai aplikasinya, anda boleh mendaftar secara langsung dengan sokongan 24/7 dan akses seumur hidup.