【Python Web開發】01-Socket網絡編程01

文章目錄

    • 1.套接字(Socket)
      • 1.1 概念
      • 1.2 類型
      • 1.3 使用步驟

Python 的網絡編程主要用于讓不同的計算機或者程序之間進行數據交換和通信,就好像人與人之間打電話、發消息一樣。

下面從幾個關鍵方面通俗易懂地介紹一下:

1.套接字(Socket)

在 Python 網絡編程里,套接字(Socket)是個很重要的概念。

你可以把它想象成電話,有了它,不同的程序之間才能建立連接、交換數據。在 Python 里,socket 模塊提供了創建套接字的功能。

1.1 概念

你可以把套接字想象成是兩部電話,每部電話都有一個獨一無二的號碼,通過這個號碼就能和對方建立聯系。在網絡里,套接字就是程序的 “電話號碼”,它代表了網絡中某個程序的具體位置。

每個套接字都有一個對應的 IP 地址和端口號,IP 地址就像城市和街道的地址,而端口號則像是具體的門牌號,有了這兩個信息,數據就能準確地發送到目標程序

1.2 類型

在 Python 網絡編程中,有兩種常見的套接字類型:

  • TCP 套接字(SOCK_STREAM):TCP(傳輸控制協議)套接字就像打電話,在數據傳輸前需要先建立連接,確保數據能可靠、有序地到達對方。一旦連接建立,通信雙方就可以持續穩定地交換數據。它適用于對數據準確性要求較高的場景,比如網頁瀏覽、文件傳輸等。

  • UDP 套接字(SOCK_DGRAM):UDP(用戶數據報協議)套接字如同發消息,無需提前建立連接,直接把數據發送出去就行。不過,它不能保證數據一定能到達對方,也無法保證數據的順序。但它的優點是傳輸速度快,常用于對實時性要求較高、對數據準確性要求相對較低的場景,像視頻會議、在線游戲等。

1.3 使用步驟

  1. TCP 套接字使用步驟
  • 服務器端

    1. 創建套接字:借助 socket.socket() 函數創建一個 TCP 套接字。
    2. 綁定地址和端口:使用 bind() 方法把套接字和特定的 IP 地址、端口號綁定在一起。
    3. 監聽連接:調用 listen() 方法讓套接字開始監聽客戶端的連接請求。
    4. 接受連接:使用 accept() 方法接受客戶端的連接請求,并且返回一個新的套接字對象和客戶端的地址。
    5. 收發數據:利用新的套接字對象通過 send() 或 sendall() 方法發送數據,使用 recv() 方法接收數據。
    6. 關閉連接:通信結束后,使用 close() 方法關閉套接字。
  • 客戶端

    1. 創建套接字:同樣使用 socket.socket() 函數創建一個 TCP 套接字。
    2. 連接服務器:調用 connect() 方法連接到服務器的指定 IP 地址和端口號。
    3. 收發數據:通過 send() 或 sendall() 方法發送數據,使用 recv() 方法接收數據。
    4. 關閉連接:通信結束后,使用 close() 方法關閉套接字。

以下是簡單的 TCP 套接字示例代碼:

服務端:

# 服務器端代碼
import socket# 創建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)# 開始監聽
server_socket.listen(1)print('服務器正在監聽端口 8888...')while True:# 接受客戶端連接connection, client_address = server_socket.accept()try:print(f'連接來自: {client_address}')# 接收數據data = connection.recv(1024)print(f'收到的數據: {data.decode()}')# 發送響應message = '你好,客戶端!'connection.sendall(message.encode())finally:# 關閉連接connection.close()

客戶端代碼:

# 客戶端代碼
import socket# 創建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 服務器地址和端口
server_address = ('localhost', 8888)# 連接服務器
client_socket.connect(server_address)try:# 發送數據message = '你好,服務器!'client_socket.sendall(message.encode())# 接收響應data = client_socket.recv(1024)print(f'收到服務器的響應: {data.decode()}')
finally:# 關閉連接client_socket.close()
  1. UDP 套接字使用步驟
  • 服務器端

    1. 創建套接字:使用 socket.socket() 函數創建一個 UDP 套接字。
    2. 綁定地址和端口:通過 bind() 方法把套接字和特定的 IP 地址、端口號綁定在一起。
    3. 收發數據:使用 sendto() 方法發送數據,使用 recvfrom() 方法接收數據。
    4. 關閉套接字:通信結束后,使用 close() 方法關閉套接字。
  • 客戶端

    1. 創建套接字:使用 socket.socket() 函數創建一個 UDP 套接字。
    2. 收發數據:使用 sendto() 方法發送數據,使用 recvfrom() 方法接收數據。
    3. 關閉套接字:通信結束后,使用 close() 方法關閉套接字。

以下是簡單的 UDP 套接字示例代碼:

服務器端代碼

# 服務器端代碼
import socket# 創建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定地址和端口
server_address = ('localhost', 9999)
server_socket.bind(server_address)print('服務器正在監聽端口 9999...')while True:# 接收數據data, client_address = server_socket.recvfrom(1024)print(f'收到來自 {client_address} 的數據: {data.decode()}')# 發送響應message = '你好,客戶端!'server_socket.sendto(message.encode(), client_address)

客戶端代碼

# 客戶端代碼
import socket# 創建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 服務器地址和端口
server_address = ('localhost', 9999)# 發送數據
message = '你好,服務器!'
client_socket.sendto(message.encode(), server_address)# 接收響應
data, server = client_socket.recvfrom(1024)
print(f'收到服務器的響應: {data.decode()}')# 關閉套接字
client_socket.close()

套接字是 Python 網絡編程的基礎,理解它的概念、類型和使用方法,能幫助你實現不同程序之間的網絡通信

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902439.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git 配置 GPG 提交簽名

使用 GPG 對 Git 提交進行簽名,可以證明該提交確實是你本人提交的。這在團隊協作和代碼審核中非常有用,GitHub/GitLab 等平臺也會顯示 “Verified” 標簽。 🧩 一、檢查是否已安裝 GPG gpg --version 如果未安裝,可使用以下命令…

MySQL運維三部曲初級篇:從零開始打造穩定高效的數據庫環境

文章目錄 一、服務器選型——給數據庫一個舒適的家二、系統調優——打造高性能跑道三、MySQL配置——讓數據庫火力全開四、監控體系——數據庫的體檢中心五、備份恢復——數據安全的最后防線六、主從復制——數據同步的藝術七、安全加固——守護數據長城 引言:從小白…

實踐項目開發-hbmV4V20250407-跨平臺開發框架深度解析與VSCode一站式開發實踐

跨平臺開發框架深度解析與VSCode一站式開發實踐 在當今多端應用開發需求激增的背景下,跨平臺開發框架成為了眾多開發者的首選。本文將圍繞React Native、Taro及其結合方案,以及Uni-app、MUI、Quasar等輕量級框架展開詳細分析,并探討如何在VS…

Android15沉浸式界面頂部有問題

Android15沉浸式界面頂部有問題 往往開發人員的手機沒這么高級,客戶或者老板的手機是Android15的。 我明明就設了狀態欄透明,我的手機也沒問題。但Android15是有問題的。 先看下有問題的界面: 解決方案: 處理1: if (…

uni-app 狀態管理深度解析:Vuex 與全局方案實戰指南

uni-app 狀態管理深度解析:Vuex 與全局方案實戰指南 一、Vuex 使用示例 1. 基礎 Vuex 配置 1.1 項目結構 src/ ├── store/ │ ├── index.js # 主入口文件 │ └── modules/ │ └── counter.js # 計數器模塊 └── main.js …

【STM32單片機】#11 I2C通信(軟件讀寫)

主要參考學習資料: B站江協科技 STM32入門教程-2023版 細致講解 中文字幕 開發資料下載鏈接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 單片機套裝:STM32F103C8T6開發板單片機C6T6核心板 實驗板最小系統板套件科協 實驗&…

每天一道面試題@第一天

1:TCP和UDP的區別,TCP為什么是三次握手,不是兩次? 因為TCP是全雙工協議,區別在于TCP可靠,UDP不可靠,效率更高。 詳解: TCP(傳輸控制協議)和 UDP(…

一款強大的實時協作Markdown工具 | CodiMD 9.6K ?

CodiMD 介紹 CodiMD 是一個開源的實時協作 Markdown 筆記工具,它允許用戶在任何平臺上共同編輯 Markdown 文檔。核心功能是實時協作,它允許多個用戶同時編輯同一個文檔,并實時看到彼此的更改。支持實時渲染預覽,支持超多的富文本格…

若依如何切換 tab 不刷新

方法 如上圖配置 菜單中選是否緩存:緩存 資料 前端手冊 |RuoYi:

【浙江大學DeepSeek公開課】回望AI三大主義與加強通識教育

回望AI三大主義與加強通識教育 一、人工智能三大主義二、人工智能發展歷程三、從 ChatGPT 到 DeepSeek四、人工智能通識教育五、人工智能的挑戰與未來 一、人工智能三大主義 符號主義 :邏輯推理,將推理視為計算過程。如蘇格拉底三段論,通過前…

邊緣計算全透視:架構、應用與未來圖景

邊緣計算全透視:架構、應用與未來圖景 一、產生背景二、本質三、特點(一)位置靠近數據源(二)分布式架構(三)實時性要求高 四、關鍵技術(一)硬件技術(二&#…

C++——多態、抽象類和接口

目錄 多態的基本概念 如何實現多態 在C中,派生類對象可以被當作基類對象使用 編程示例 關鍵概念總結 抽象類 一、抽象類的定義 基本語法 二、抽象類的核心特性 1. 不能直接實例化 2. 派生類必須實現所有純虛函數才能成為具體類 3. 可以包含普通成員函數和…

初級達夢dba的技能水準

在x86環境(windows、linux)安裝單機軟件,安裝客戶端創建過至少20套數據庫,優化參數并更新過正式許可會用邏輯導出導入以及dmrman備份了解manager工具的使用配置sqllog日志,并能解釋輸出內容能夠分析因磁盤空間不足、內…

監控頁面卡頓PerformanceObserver

監控頁面卡頓PerformanceObserver 性能觀察器掘金 const observer new PerformanceObserver((list) > {}); observer.observe({entryTypes: [longtask], })

智能座艙測試內容與步驟

智能座艙的測試步驟通常包括以下環節: 1.測試環境搭建與準備 ? 硬件需求分析:準備測試車輛、服務器與工作站、網絡設備以及傳感器和執行器模擬器等硬件設備。 ? 軟件需求分析:選擇測試管理軟件、自動化測試工具、模擬軟件和開發調試工具等。…

Redis——網絡模型

目錄 前言 1.用戶空間和內核空間 1.2用戶空間和內核空間的切換 1.3切換過程 2.阻塞IO 3.非阻塞IO 4.IO多路復用 4.1.IO多路復用過程 4.2.IO多路復用監聽方式 4.3.IO多路復用-select 4.4.IO多路復用-poll 4.5.IO多路復用-epoll 4.6.select poll epoll總結 4.7.IO多…

電力系統中為什么采用三相交流電?

電力系統中為什么采用三相交流電 電力系統中采用三相交流電,主要是因為它在輸電效率、設備使用、能量傳輸平穩性等方面相比單相交流或直流電具有顯著優勢。下面我詳細解釋一下原因: 🌟 1. 提高輸電效率(節省電纜材料)…

python簡介與入門

目錄 python初始 python的優勢 python的特性 python的應用領域 Linux環境中安裝python 下載python3.11.6 安裝依賴包 解壓python壓縮包 安裝python 編譯及安裝 建立軟連接 測試python3運行 設置國內pip更新源 更新pip版本(必須更新) wind…

Web內網滲透知識大全

內網滲透 端口轉發 需要三個主機,Windows7、Windows2016、kali Windows7為內網主機 Windows2016為跳板機 kali為攻擊機 使用到的工具 netsh、MSF 我們先在Windows7上開啟一個80服務,而這個80服務只能由Windows2016訪問,kali不能訪問 我們…

ffmpeg av_buffer_unref的邏輯實現; av_freep 和 av_freep函數的區別

av_buffer_unref 是 FFmpeg 中用于管理引用計數和內存釋放的核心函數,其內部實現機制如下: ?一、核心流程? ?引用計數遞減? 函數首先對 AVBufferRef 的 buffer->refcount 進行原子遞減操作(通過 atomic_fetch_add_explicit 等機制保證…