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