wordpress怎么仿站資訊門戶類網(wǎng)站有哪些
文章目錄
- 前言
- 一、pandas是什么?
- 二、使用步驟
- 1.引入庫
- 2.讀入數(shù)據(jù)
- 總結(jié)
? 一.客戶端與服務(wù)端通信原理
1. 服務(wù)器端
服務(wù)器端的主要任務(wù)是監(jiān)聽來自客戶端的連接請求,并與之建立連接,然后接收和發(fā)送數(shù)據(jù)。
-
創(chuàng)建套接字:首先,服務(wù)器需要?jiǎng)?chuàng)建一個(gè)套接字(socket),這個(gè)套接字將用于監(jiān)聽來自客戶端的連接請求。在創(chuàng)建套接字時(shí),需要指定地址族(如IPv4的
socket.AF_INET
)和套接字類型(對于TCP,使用socket.SOCK_STREAM
)。 -
綁定地址和端口:服務(wù)器需要將套接字綁定到一個(gè)具體的IP地址和端口號上,以便客戶端能夠找到并連接到它。
-
監(jiān)聽連接:服務(wù)器使用
listen()
方法開始監(jiān)聽連接請求。此時(shí),服務(wù)器處于等待狀態(tài),直到接收到客戶端的連接請求。 -
接受連接:當(dāng)服務(wù)器接收到客戶端的連接請求時(shí),它使用
accept()
方法來接受這個(gè)連接。accept()
方法會(huì)返回一個(gè)包含新連接的套接字和客戶端地址的元組。服務(wù)器將使用這個(gè)新連接的套接字來與客戶端進(jìn)行通信。 -
數(shù)據(jù)收發(fā):一旦連接建立,服務(wù)器和客戶端就可以通過各自的套接字發(fā)送和接收數(shù)據(jù)了。數(shù)據(jù)可以是文本、二進(jìn)制文件等任何類型的數(shù)據(jù)。
-
關(guān)閉連接:通信完成后,服務(wù)器和客戶端都應(yīng)該關(guān)閉它們各自的套接字,以釋放系統(tǒng)資源。
2. 客戶端
客戶端的主要任務(wù)是連接到服務(wù)器,并與之進(jìn)行數(shù)據(jù)交換。
-
創(chuàng)建套接字:與服務(wù)器類似,客戶端也需要?jiǎng)?chuàng)建一個(gè)套接字,并指定地址族和套接字類型。
-
連接服務(wù)器:客戶端使用
connect()
方法連接到服務(wù)器。在調(diào)用connect()
方法時(shí),需要傳入服務(wù)器的IP地址和端口號。 -
數(shù)據(jù)收發(fā):一旦連接建立,客戶端就可以通過套接字發(fā)送數(shù)據(jù)到服務(wù)器,并接收服務(wù)器發(fā)回的數(shù)據(jù)了。
-
關(guān)閉連接:通信完成后,客戶端應(yīng)該關(guān)閉套接字,以釋放系統(tǒng)資源。
3. 原理總結(jié)
-
TCP三次握手:在TCP通信中,建立連接的過程涉及到三次握手。這確保了雙方都能夠確認(rèn)對方的存在和準(zhǔn)備接收數(shù)據(jù)。
-
數(shù)據(jù)傳輸:TCP協(xié)議確保了數(shù)據(jù)的可靠傳輸。它通過序列號、確認(rèn)應(yīng)答、超時(shí)重傳等機(jī)制來確保數(shù)據(jù)的順序、完整性和無重復(fù)傳輸。
-
連接管理:TCP連接是面向連接的,這意味著在數(shù)據(jù)交換之前必須先建立連接,并在數(shù)據(jù)交換完成后關(guān)閉連接。
-
錯(cuò)誤處理:在通信過程中,可能會(huì)遇到各種錯(cuò)誤(如網(wǎng)絡(luò)中斷、連接超時(shí)等)。Python的
socket
模塊提供了相應(yīng)的異常處理機(jī)制,允許開發(fā)者在發(fā)生錯(cuò)誤時(shí)采取適當(dāng)?shù)拇胧?/p>
二.Socket模塊
套接字(Socket)是一個(gè)非常重要的概念,它提供了一個(gè)用于網(wǎng)絡(luò)通信的接口。套接字允許不同計(jì)算機(jī)上的程序之間進(jìn)行數(shù)據(jù)傳輸。這種通信方式既可以是本機(jī)上的程序間的通信,也可以是跨網(wǎng)絡(luò)的計(jì)算機(jī)之間的通信
在Python中進(jìn)行TCP和UDP通信,可以使用內(nèi)置的socket模塊。socket模塊提供了用于創(chuàng)建客戶端和服務(wù)器端套接字的函數(shù)和方法。以下是一些常用的TCP通信函數(shù):
服務(wù)端
- 創(chuàng)建一個(gè)TCP套接字:
socket.socket(socket.AF_INET, socket.SOCK_STREAM):
- 將套接字綁定到指定的地址和端口。
socket.bind(IP,端口)
- 開始監(jiān)聽傳入的連接請求。?
socket.listen(同時(shí)處理的請求數(shù))
- ?接受一個(gè)連接請求,返回一個(gè)新的套接字對象,以及客戶端的地址
socket.accept()
socket.accept()
?是服務(wù)器在調(diào)用?listen()
?方法之后等待客戶端連接時(shí)使用的。這個(gè)調(diào)用會(huì)阻塞程序運(yùn)行,直到有一個(gè)客戶端連接到服務(wù)器,再執(zhí)行下面程序- 當(dāng)客戶端成功連接到服務(wù)器時(shí),
accept()
?方法會(huì)返回一個(gè)元組,其中包含兩個(gè)元素:- 第一個(gè)元素包含服務(wù)端接收客戶端連接的IP+端口
- 第二個(gè)元素包含客戶端連接的IP+端口
?客戶端
- 連接到服務(wù)端的地址和端口
socket.connect(IP,端口)
- ?發(fā)送數(shù)據(jù)到連接的另一端
socket.send(data)
- ?接收來自連接的數(shù)據(jù)
socket.recv(字節(jié)大小)
- ?關(guān)閉套接字連接
socket.close()
三.演示案例
服務(wù)端
import socket# 創(chuàng)建TCP服務(wù)器端
Tcp_Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Tcp_Server.bind(("0.0.0.0",8888)) #將IP和端口與套接字綁定
Tcp_Server.listen(10) #此處設(shè)置該進(jìn)程socket最多處理的連接數(shù)是10#等待客戶端連接
while True:Tcp_Client,info = Tcp_Server.accept() #阻塞程序運(yùn)行直到收到客戶端連接Tcp_Client.send("成功連接服務(wù)器!".encode()) #將發(fā)送的數(shù)據(jù)進(jìn)行UTF-8編碼
客戶端?
import socket
Tcp_Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#連接服務(wù)器
Server_IP = ("127.0.0.1",8888)
Tcp_Client.connect(Server_IP) #連接服務(wù)器127.0.0.1中端口號為8888的進(jìn)程socket#接收服務(wù)端信息
data_Server = Tcp_Client.recv(1024) #接收服務(wù)端的字節(jié)數(shù)為1024
print(data_Server.decode()) #將接收的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符串
總結(jié)
?
?