Jadual Kandungan
Mengapa menggunakan Soket
Apakah itu Soket
Cara melaksanakan pengaturcaraan Socket dalam Python
Apakah pelayan itu?
Apakah itu klien
传输 Python 对象
Rumah pembangunan bahagian belakang Tutorial Python Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Apr 22, 2023 pm 05:04 PM
protokol rangkaian sockets

Dalam Internet hari ini, protokol Socket ialah salah satu asas yang paling penting. Artikel ini merangkumi semua bidang bekerja dengan pengaturcaraan Socket dalam Python.

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Mengapa menggunakan Soket

Soket ialah pelbagai protokol komunikasi yang membentuk rangkaian hari ini Protokol ini membolehkan penghantaran maklumat antara dua program atau peranti yang berbeza. menjadi mungkin. Sebagai contoh, apabila kami membuka pelayar, kami sebagai pelanggan membuat sambungan ke pelayan untuk memindahkan maklumat.

Sebelum mendalami prinsip komunikasi ini, mari kita jelaskan dahulu apa itu Soket.

Apakah itu Soket

Secara umumnya, Soket ialah protokol aplikasi dalaman yang dibina untuk menghantar dan menerima data. Satu rangkaian akan mempunyai dua Soket, satu untuk setiap peranti atau program komunikasi, Soket ini adalah gabungan alamat IP dan port. Bergantung pada nombor port yang digunakan, satu peranti boleh mempunyai nombor "n" Soket, dan port yang berbeza boleh digunakan untuk jenis protokol yang berbeza.

Rajah berikut menunjukkan beberapa nombor port biasa dan maklumat protokol yang berkaitan:

Protokol

Nombor port

Perpustakaan Python

Mohon

HTTP

80

httplib, urllib, permintaan

Halaman web, tapak web

FTP

20

ftplib

Pemindahan Fail

NNTP

119

nttplib

Pemindahan Berita

SMTP

25

smtplib

Hantar E-mel

Telnet

23

telnetlib

baris arahan

POP3

110

poplib

Terima e-mel

Gopher

70

gopherlib

Pemindahan Dokumen

Sekarang kita telah memahami konsep Soket, mari kita lihat modul Socket Python

Cara melaksanakan pengaturcaraan Socket dalam Python

Untuk melaksanakan pengaturcaraan Socket dalam Python, anda perlu Import modul soket.

Beberapa kaedah penting modul ini adalah seperti berikut:

方法

描述

socket.socket()

用于创建 socket(服务器端和客户端都需要创建)

socket.accept()

用于接受连接。它返回一对值(conn,address),其中conn是用于发送或接收数据的新 socket 对象,address是连接另一端的 socket 地址

socket.bind()

用于绑定到指定为参数的地址

socket.close()

用于关闭 socket

socket.connect()

用于连接到指定为参数的远程地址

socket.listen()

使服务器能够接受连接

Penerangan
socket.accept()
digunakan untuk menerima sambungan. Ia mengembalikan sepasang nilai (sambung, alamat), dengan sambung ialah objek soket baharu yang digunakan untuk menghantar atau menerima data dan alamat ialah alamat soket di hujung sambungan yang satu lagi
digunakan untuk mengikat ke alamat yang ditentukan sebagai parameter
td>
socket.listen()
Dayakan pelayan untuk Terima sambungan

Sekarang kita memahami kepentingan modul soket, mari lihat cara membina pelayan dan klien dalam Python.

Apakah pelayan itu?

Pelayan adalah sama ada program, komputer atau peranti yang digunakan khusus untuk mengurus sumber rangkaian. Pelayan boleh berada pada peranti atau komputer yang sama, disambungkan secara setempat ke peranti dan komputer lain, atau bahkan dari jauh. Terdapat pelbagai jenis pelayan seperti pelayan pangkalan data, pelayan web, pelayan cetak, dll.

Pelayan biasanya menggunakan socket.socket(), socket.bind(), socket.listen(), dsb. untuk mewujudkan sambungan dan mengikat kepada pelanggan Sekarang mari kita menulis program untuk mencipta pelayan.

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(),1234))
#port number can be anything between 0-65535(we usually specify non-previleged ports which are > 1023)
s.listen(5)
 
while True:
clt,adr=s.accept()
print(f"Connection to {adr}established")
 #f string is literal string prefixed with f which 
 #contains python expressions inside braces
clt.send(bytes("Socket Programming in Python","utf-8 ")) #to send info to clientsocket
Salin selepas log masuk

Syarat pertama yang perlu untuk mencipta soket ialah mengimport modul yang berkaitan. Kemudian gunakan kaedah socket.socket() untuk mencipta soket sisi pelayan.


AF_INET merujuk kepada alamat dari Internet, yang memerlukan pasangan (hos, port), di mana hos boleh menjadi URL tapak web tertentu atau alamat, Nombor port ialah integer. SOCK_STREAM digunakan untuk mencipta protokol TCP. Kaedah

bind() menerima dua parameter sebagai tupel (hos, port). Perlu diingatkan di sini bahawa lebih baik menggunakan nombor port 4 digit, kerana nombor port yang lebih rendah biasanya diduduki atau dikhaskan oleh sistem. Kaedah listen() membenarkan pelayan menerima sambungan, dan 5 ialah baris gilir untuk berbilang sambungan yang diterima pada masa yang sama. Nilai minimum yang boleh ditentukan di sini ialah 0, dan jika tiada parameter dinyatakan, parameter lalai yang sesuai digunakan.

Gelung while membenarkan selama-lamanya menerima sambungan, clt dan adr ialah objek dan alamat klien, pernyataan cetakan hanya mencetak alamat dan nombor port soket klien, dan akhirnya, clt.send digunakan untuk hantar bait Hantar data ke unit.

Sekarang pelayan kami telah disediakan, mari beralih kepada pelanggan.

Apakah itu klien

Klien ialah komputer atau perisian yang menerima maklumat atau perkhidmatan daripada pelayan. Dalam model pelanggan-pelayan, pelanggan meminta perkhidmatan daripada pelayan. Contoh terbaik ialah pelayar web seperti Google Chrome, Firefox, dll. Pelayar web ini meminta pelayan web untuk menyediakan halaman web dan perkhidmatan yang diperlukan berdasarkan arahan pengguna. Contoh lain termasuk permainan dalam talian, sembang dalam talian, dsb.

Sekarang, mari lihat cara menulis program klien dalam bahasa pengaturcaraan Python:

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 2346))
msg=s.recv(1024)
print(msg.decode("utf-8"))
Salin selepas log masuk

Mula-mula masih mengimport modul soket, dan kemudian buat soket seperti semasa membuat pelayan. Kemudian untuk membuat sambungan antara klien dan pelayan, anda perlu menggunakan kaedah connect() dengan menentukan (hos, port).

Nota: gethostname diperlukan apabila klien dan pelayan berada pada komputer yang sama. (LAN–localip/WAN–publicip)

Di sini, pelanggan ingin menerima beberapa maklumat daripada pelayan, untuk ini kita perlu menggunakan kaedah recv()​, maklumat itu disimpan dalam yang lain mesej berubah-ubah. Adalah penting untuk ambil perhatian bahawa maklumat yang dipindahkan adalah dalam bait, dan dalam klien program di atas, maksimum 1024 bait (saiz penimbal) boleh diterima dalam satu pemindahan. Ini boleh ditentukan sebagai sebarang nombor bergantung pada jumlah maklumat yang dipindahkan.

Akhir sekali, nyahkod dan mencetak mesej yang dihantar.

Sekarang kita memahami cara mencipta program pelayan-pelanggan, mari lihat bagaimana ia perlu dilaksanakan.

Interaksi Pelayan Pelanggan

Untuk melaksanakan program ini, anda perlu membuka program arahan, pergi ke folder tempat program klien dan pelayan dicipta, dan taip:

py server.py #这里,server.py 是服务器的文件名
Salin selepas log masuk

Tidak Pelayan mula berjalan tanpa diduga

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Untuk melaksanakan klien, anda perlu membuka tetingkap cmd lain dan taip:

pyclient.py
Salin selepas log masuk

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Mari kita kurangkan saiz penimbal kepada 7 dan lihat rupa program yang sama

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Seperti yang ditunjukkan dalam rajah, selepas memindahkan 7 bait, Sambungan ditamatkan.

Sebenarnya ini adalah masalah kerana kami belum menerima maklumat lengkap, tetapi sambungan telah ditutup awal. Biar kami selesaikan masalah ini.

Berbilang komunikasi

Untuk meneruskan sambungan sebelum klien menerima mesej lengkap, kami boleh menggunakan gelung sementara

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 2346))
while True:
msg=s.recv(7)
print(msg.decode("utf-8"))
Salin selepas log masuk

Selepas pengubahsuaian ini, setiap penghantaran akan menjadi 7 bait untuk menerima mesej lengkap.

Tetapi ini membawa masalah lain, sambungan tidak pernah terputus, anda tidak tahu bila ia akan ditamatkan. Juga, bagaimana jika kita sebenarnya tidak tahu berapa besar mesej atau maklumat yang pelanggan akan terima daripada pelayan. Dalam kes ini, kita perlu terus menambah baik kod

complete_info=''
while True:
msg = s.recv(7)
if len(msg)<=0:
break
complete_info += msg.decode("utf-8")
print(complete_info)
Salin selepas log masuk

Di bahagian pelayan, gunakan kaedah close() seperti berikut:

clt.close()
Salin selepas log masuk

Output adalah seperti berikut:

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

程序会检查信息的大小,并将其打印到一次两个字节的缓冲区中,然后在完成连接后关闭连接。

传输 Python 对象

目前为止我们仅仅掌握了传递字符串的方法,但是,Python 中的 Socket 编程也允许我们传输 Python 对象。这些对象可以是集合、元组、字典等。要实现这一点,需要用到 Python 的 pickle 模块。

Python pickle模块

当我们实际序列化或反序列化 Python 中的对象时,就会使用到 Python pickle 模块。让我们看一个小例子

import pickle
 
mylist=[1,2,'abc']
mymsg = pickle.dumps(mylist) 
print(mymsg)
Salin selepas log masuk

Output:

b’x80x03]qx00(Kx01Kx02Xx03x00x00x00abcqx01e.’
Salin selepas log masuk

在上面的程序中,mylist​是使用pickle模块的dumps()​函数序列化的。还要注意,输出以b开头,表示它已转换为字节。在 socket 编程中,可以实现此模块以在客户端和服务器之间传输 python 对象。

如何使用 pickle 模块传输 Python 对象

当我们将 pickle 与 socket 一起使用时,完全可以通过网络传输任何内容。

先来看看服务端代码

Server-Side:

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)
while True:
clt , adr = s.accept()
print(f"Connection to {adr}established")
 
m={1:"Client", 2:"Server"}
mymsg = pickle.dumps(m)#the msg we want to print later
mymsg = {len(mymsg):{a}}"utf-8") + mymsg
clt.send(mymsg)
Salin selepas log masuk

这里,m​是一个字典,它基本上是一个需要从服务器发送到客户端的 Python 对象。这是通过首先使用dumps()序列化对象,然后将其转换为字节来完成的。

现在,让我们记下客户端:

Client-Side:

import socket
import pickle
a=10
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 2133))
 
while 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("Recieved the complete info")
print(complete_info[a:])
m = pickle.loads(complete_info[a:])
print(m)
rec_msg = True
complete_info = b''
print(complete_info)
Salin selepas log masuk

第一个while循环将帮助我们跟踪完整的消息(complete_info)以及正在使用缓冲区接收的消息(rec_msg)。

然后,在接收消息时,我们所做的就是打印每一位消息,并将其放在大小为10的缓冲区中接收。此大小可以是任何大小,具体取决于个人选择。

然后如果收到的消息等于完整消息,我们只会将消息打印为收到的完整信息,然后使用loads()反序列化消息。

输出如下:

Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python

Atas ialah kandungan terperinci Penjelasan terperinci dan panduan praktikal pengaturcaraan Soket Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaraskan saiz MTU pada Windows 11 Bagaimana untuk melaraskan saiz MTU pada Windows 11 Aug 25, 2023 am 11:21 AM

Jika anda tiba-tiba mengalami sambungan internet yang perlahan pada Windows 11 dan anda telah mencuba setiap helah dalam buku, ia mungkin tiada kaitan dengan rangkaian anda dan segala-galanya berkaitan dengan unit penghantaran maksimum (MTU) anda. Masalah mungkin berlaku jika sistem anda menghantar atau menerima data dengan saiz MTU yang salah. Dalam siaran ini, kita akan belajar cara menukar saiz MTU pada Windows 11 untuk sambungan internet yang lancar dan tidak terganggu. Apakah saiz MTU lalai dalam Windows 11? Saiz MTU lalai dalam Windows 11 ialah 1500, iaitu maksimum yang dibenarkan. MTU bermaksud unit penghantaran maksimum. Ini ialah saiz paket maksimum yang boleh dihantar atau diterima pada rangkaian. setiap rangkaian sokongan

Modul pengembangan WLAN telah berhenti [fix] Modul pengembangan WLAN telah berhenti [fix] Feb 19, 2024 pm 02:18 PM

Jika terdapat masalah dengan modul pengembangan WLAN pada komputer Windows anda, ia mungkin menyebabkan anda terputus sambungan daripada Internet. Keadaan ini sering mengecewakan, tetapi mujurlah, artikel ini menyediakan beberapa cadangan mudah yang boleh membantu anda menyelesaikan masalah ini dan membolehkan sambungan wayarles anda berfungsi dengan baik semula. Betulkan Modul Kebolehlanjutan WLAN Telah Berhenti Jika Modul Kebolehlanjutan WLAN telah berhenti berfungsi pada komputer Windows anda, ikuti cadangan ini untuk membetulkannya: Jalankan Penyelesai Masalah Rangkaian dan Internet untuk melumpuhkan dan mendayakan semula sambungan rangkaian wayarles Mulakan semula Perkhidmatan Konfigurasi Auto WLAN Ubah Suai Pilihan Kuasa Ubah suai Tetapan Kuasa Lanjutan Pasang Semula Pemacu Penyesuai Rangkaian Jalankan Beberapa Perintah Rangkaian Sekarang, mari kita lihat secara terperinci

Bagaimana untuk menyelesaikan ralat pelayan DNS win11 Bagaimana untuk menyelesaikan ralat pelayan DNS win11 Jan 10, 2024 pm 09:02 PM

Kita perlu menggunakan DNS yang betul apabila menyambung ke Internet untuk mengakses Internet. Dengan cara yang sama, jika kita menggunakan tetapan dns yang salah, ia akan menyebabkan ralat pelayan dns Pada masa ini, kita boleh cuba menyelesaikan masalah dengan memilih untuk mendapatkan dns secara automatik dalam tetapan rangkaian penyelesaian. Cara menyelesaikan ralat pelayan dns rangkaian win11 Kaedah 1: Tetapkan semula DNS 1. Pertama, klik Mula dalam bar tugas untuk masuk, cari dan klik butang ikon "Tetapan". 2. Kemudian klik arahan pilihan "Rangkaian & Internet" di lajur kiri. 3. Kemudian cari pilihan "Ethernet" di sebelah kanan dan klik untuk masuk. 4. Selepas itu, klik "Edit" dalam tugasan pelayan DNS, dan akhirnya tetapkan DNS kepada "Automatik (D

Betulkan muat turun 'Ralat Rangkaian Gagal' pada Chrome, Google Drive dan Photos! Betulkan muat turun 'Ralat Rangkaian Gagal' pada Chrome, Google Drive dan Photos! Oct 27, 2023 pm 11:13 PM

Apakah isu "Muat turun ralat rangkaian gagal"? Sebelum kita menyelidiki penyelesaiannya, mari kita fahami dahulu maksud isu "Muat Turun Ralat Rangkaian Gagal". Ralat ini biasanya berlaku apabila sambungan rangkaian terganggu semasa memuat turun. Ia boleh berlaku atas pelbagai sebab seperti sambungan internet yang lemah, kesesakan rangkaian atau isu pelayan. Apabila ralat ini berlaku, muat turun akan berhenti dan mesej ralat akan dipaparkan. Bagaimana untuk membetulkan muat turun yang gagal dengan ralat rangkaian? Menghadapi "Ralat Rangkaian Muat Turun Gagal" boleh menjadi penghalang semasa mengakses atau memuat turun fail yang diperlukan. Sama ada anda menggunakan penyemak imbas seperti Chrome atau platform seperti Google Drive dan Google Photos, ralat ini akan muncul yang menyebabkan kesulitan. Di bawah ialah perkara untuk membantu anda menavigasi dan menyelesaikan isu ini

Betulkan: WD My Cloud tidak muncul pada rangkaian dalam Windows 11 Betulkan: WD My Cloud tidak muncul pada rangkaian dalam Windows 11 Oct 02, 2023 pm 11:21 PM

Jika WDMyCloud tidak muncul pada rangkaian dalam Windows 11, ini boleh menjadi masalah besar, terutamanya jika anda menyimpan sandaran atau fail penting lain di dalamnya. Ini boleh menjadi masalah besar bagi pengguna yang kerap perlu mengakses storan rangkaian, jadi dalam panduan hari ini, kami akan menunjukkan kepada anda cara untuk menyelesaikan masalah ini secara kekal. Mengapa WDMyCloud tidak muncul pada rangkaian Windows 11? Peranti MyCloud, penyesuai rangkaian atau sambungan Internet anda tidak dikonfigurasikan dengan betul. Fungsi SMB tidak dipasang pada komputer. Gangguan sementara dalam Winsock kadangkala boleh menyebabkan masalah ini. Apakah yang perlu saya lakukan jika awan saya tidak muncul pada rangkaian? Sebelum kami mula membetulkan masalah, anda boleh melakukan beberapa semakan awal:

Apakah yang perlu saya lakukan jika bumi dipaparkan di sudut kanan bawah Windows 10 apabila saya tidak boleh mengakses Internet Pelbagai penyelesaian kepada masalah yang Bumi tidak dapat mengakses Internet dalam Win10? Apakah yang perlu saya lakukan jika bumi dipaparkan di sudut kanan bawah Windows 10 apabila saya tidak boleh mengakses Internet Pelbagai penyelesaian kepada masalah yang Bumi tidak dapat mengakses Internet dalam Win10? Feb 29, 2024 am 09:52 AM

Artikel ini akan memperkenalkan penyelesaian kepada masalah bahawa simbol glob dipaparkan pada rangkaian sistem Win10 tetapi tidak boleh mengakses Internet. Artikel itu akan menyediakan langkah terperinci untuk membantu pembaca menyelesaikan masalah rangkaian Win10 yang menunjukkan bahawa bumi tidak boleh mengakses Internet. Kaedah 1: Mulakan semula secara langsung, periksa sama ada kabel rangkaian tidak dipasang dengan betul dan sama ada jalur lebar tertunggak. Jika tiada perkara penting yang sedang dilakukan pada komputer, anda boleh memulakan semula komputer secara langsung Kebanyakan masalah kecil boleh diselesaikan dengan cepat dengan memulakan semula komputer. Jika ditentukan jalur lebar tidak tertunggak dan rangkaiannya normal, itu adalah perkara lain. Kaedah 2: 1. Tekan kekunci [Win], atau klik [Start Menu] di sudut kiri bawah Dalam item menu yang terbuka, klik ikon gear di atas butang kuasa Ini ialah [Settings].

Bagaimana untuk mendayakan/lumpuhkan Wake on LAN dalam Windows 11 Bagaimana untuk mendayakan/lumpuhkan Wake on LAN dalam Windows 11 Sep 06, 2023 pm 02:49 PM

Wake on LAN ialah ciri rangkaian pada Windows 11 yang membolehkan anda membangunkan komputer anda dari jauh dari mod hibernasi atau tidur. Walaupun pengguna biasa tidak sering menggunakannya, ciri ini berguna untuk pentadbir rangkaian dan pengguna kuasa yang menggunakan rangkaian berwayar, dan hari ini kami akan menunjukkan kepada anda cara untuk menyediakannya. Bagaimanakah saya tahu jika komputer saya menyokong Wake on LAN? Untuk menggunakan ciri ini, komputer anda memerlukan yang berikut: PC perlu disambungkan kepada bekalan kuasa ATX supaya anda boleh membangunkannya daripada mod tidur dari jauh. Senarai kawalan akses perlu dibuat dan ditambah pada semua penghala dalam rangkaian. Kad rangkaian perlu menyokong fungsi wake-up-on-LAN. Untuk ciri ini berfungsi, kedua-dua komputer perlu berada pada rangkaian yang sama. Walaupun kebanyakan penyesuai Ethernet menggunakan

Bagaimana untuk menyemak butiran dan status sambungan rangkaian pada Windows 11 Bagaimana untuk menyemak butiran dan status sambungan rangkaian pada Windows 11 Sep 11, 2023 pm 02:17 PM

Untuk memastikan sambungan rangkaian anda berfungsi dengan betul atau untuk menyelesaikan masalah, kadangkala anda perlu menyemak butiran sambungan rangkaian pada Windows 11. Dengan melakukan ini, anda boleh melihat pelbagai maklumat termasuk alamat IP anda, alamat MAC, kelajuan pautan, versi pemacu dan banyak lagi, dan dalam panduan ini, kami akan menunjukkan kepada anda cara melakukannya. Bagaimana untuk mencari butiran sambungan rangkaian pada Windows 11? 1. Gunakan apl "Tetapan" dan tekan kekunci + untuk membuka Tetapan Windows. WindowsI Seterusnya, navigasi ke Rangkaian & Internet di anak tetingkap kiri dan pilih jenis rangkaian anda. Dalam kes kami, ini ialah Ethernet. Jika anda menggunakan rangkaian wayarles, pilih rangkaian Wi-Fi sebaliknya. Di bahagian bawah skrin anda sepatutnya melihat

See all articles