Python網絡編程技術

一、網絡編程基礎概念

1.1 什么是網絡編程?

  • 定義:程序通過網絡與其他程序進行通信的技術。
  • 核心目標:實現數據在不同主機或進程間的傳輸與交互。
  • 應用場景:Web服務、API調用、實時通信、分布式系統等。

1.2 網絡通信模型

  • OSI七層模型(簡要介紹)
  • TCP/IP四層模型
    • 應用層(HTTP, FTP, DNS)
    • 傳輸層(TCP, UDP)
    • 網絡層(IP)
    • 鏈路層(以太網、Wi-Fi)

1.3 IP地址與端口

  • IPv4 vs IPv6
  • 公網IP與私網IP(NAT原理簡述)
  • 端口號范圍:0–65535(知名端口、注冊端口、動態端口)

1.4 客戶端-服務器模型(C/S) vs 對等網絡(P2P)

  • C/S 架構詳解(請求-響應模式)
  • P2P 特點與典型應用(如BitTorrent)

二、網絡協議簡介

2.1 TCP(傳輸控制協議)

  • 面向連接、可靠傳輸
  • 三次握手、四次揮手
  • 流量控制、擁塞控制
  • 適用場景:文件傳輸、網頁瀏覽、郵件

2.2 UDP(用戶數據報協議)

  • 無連接、不可靠但高效
  • 低延遲、適用于實時性要求高的場景
  • 適用場景:音視頻通話、DNS查詢、游戲通信

2.3 HTTP/HTTPS 協議

  • HTTP 1.1 vs HTTP/2 vs HTTP/3(QUIC)
  • 請求方法:GET、POST、PUT、DELETE 等
  • 狀態碼分類(1xx~5xx)
  • 頭部字段(Content-Type, Authorization, Cookie 等)
  • HTTPS = HTTP + SSL/TLS 加密

2.4 WebSocket

  • 全雙工通信協議
  • 建立在HTTP之上,升級為長連接
  • 用于實時應用(聊天、通知、股票行情)

2.5 其他常見協議簡述

  • FTP(文件傳輸)
  • SMTP/POP3/IMAP(電子郵件)
  • DNS(域名解析)
  • MQTT(物聯網輕量級消息協議)

三、Socket編程基礎

3.1 什么是Socket?

  • Socket 是網絡通信的“插座”,是操作系統提供的抽象接口。
  • 類比:電話系統中的插孔與撥號。

3.2 創建套接字(socket模塊)

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # TCP
# sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # UDP

3.3 綁定地址與端口

sock.bind(('localhost', 8080))

3.4 監聽與接受連接(服務器端)

sock.listen(5)
conn, addr = sock.accept()

3.5 發送與接收數據

conn.send(b"Hello Client")
data = conn.recv(1024)

3.6 關閉連接

conn.close()
sock.close()

3.7 簡單TCP客戶端示例

client = socket.socket()
client.connect(('localhost', 8080))
client.send(b"GET / HTTP/1.1\r\nHost: localhost\r\n\r\n")
print(client.recv(4096))
client.close()

四、Python標準庫中的網絡模塊

4.1?socket?模塊

  • 核心底層網絡通信工具
  • 支持TCP/UDP、IPv4/IPv6
  • 適合構建自定義協議服務

4.2?http.server?模塊

  • 快速搭建靜態HTTP服務器
python -m http.server 8000
  • 自定義處理類繼承?BaseHTTPRequestHandler
  • 示例:實現簡單REST接口

4.3?urllib?模塊

  • 內置HTTP客戶端庫
  • 包含?urllib.request,?urllib.parse,?urllib.error
  • 示例:
from urllib.request import urlopen
response = urlopen('https://httpbin.org/get')
print(response.read().decode())

4.4?requests?庫(第三方,但事實標準)

  • 更簡潔、人性化的HTTP客戶端
  • 支持Session、認證、超時、重試等高級功能
import requests
resp = requests.get('https://httpbin.org/json', timeout=5)
print(resp.json())
  • 推薦使用場景:爬蟲、API調用、自動化測試

五、高級網絡編程技術

5.1 并發處理:多線程 vs 多進程

方式優點缺點
多線程輕量、共享內存GIL限制CPU密集型任務
多進程充分利用多核內存開銷大、進程間通信復雜
示例:多線程服務器
import threading
def handle_client(conn):data = conn.recv(1024)conn.send(f"Echo: {data}".encode())conn.close()while True:conn, addr = sock.accept()thread = threading.Thread(target=handle_client, args=(conn,))thread.start()

5.2 I/O多路復用:select?與?poll

  • 單線程處理多個Socket連接
  • 避免阻塞等待單個連接
  • 適用于高并發、低活躍連接場景
使用?select?實現并發服務器
import select
inputs = [server_socket]
while True:readable, _, _ = select.select(inputs, [], [])for s in readable:if s is server_socket:conn, addr = s.accept()inputs.append(conn)else:data = s.recv(1024)if data:s.send(data)else:s.close()inputs.remove(s)

注意:Linux下可使用 epoll 替代 poll,性能更優。

5.3 異步編程:asyncio?與協程

  • 基于事件循環的非阻塞I/O模型
  • 使用?async/await?語法編寫異步代碼
  • 高效處理大量并發連接(如Web服務器、爬蟲)
示例:異步TCP回聲服務器
import asyncioasync def handle_echo(reader, writer):data = await reader.read(100)message = data.decode()writer.write(data)await writer.drain()writer.close()async def main():server = await asyncio.start_server(handle_echo, '127.0.0.1', 8888)async with server:await server.serve_forever()asyncio.run(main())

六、常見網絡編程應用場景

6.1 Web爬蟲開發

  • 使用?requests?+?BeautifulSoup?/?lxml
  • 處理反爬機制(User-Agent、Cookies、驗證碼)
  • 分布式爬蟲框架:Scrapy

6.2 RESTful API 設計與實現

  • 使用 Flask 或 FastAPI 快速構建API
  • 遵循REST原則(資源、HTTP方法、狀態碼)
  • 返回JSON格式數據
  • 示例:用戶管理系統API

6.3 實時通信應用(如聊天室)

  • TCP長連接或多線程/異步處理
  • 消息廣播機制
  • 可結合WebSocket提升體驗

6.4 文件上傳/下載服務

  • 支持分塊傳輸、斷點續傳
  • 進度條顯示(客戶端)
  • 校驗與壓縮支持

七、安全與性能優化

7.1 SSL/TLS加密通信

  • 使用?ssl?模塊包裝Socket
  • 生成自簽名證書或使用Let's Encrypt
  • 示例:安全HTTPS服務器(結合http.server?+?ssl.wrap_socket

7.2 連接池管理

  • 減少頻繁建立/關閉連接的開銷
  • requests.Session()?自帶連接池
  • 數據庫連接池類比理解

7.3 超時設置

  • 防止程序無限等待
  • 設置連接超時、讀取超時
requests.get(url, timeout=(3, 10))  # connect=3s, read=10s

7.4 性能調優建議

  • 合理設置緩沖區大小(recv size)
  • 使用Gunicorn/uWSGI部署生產級服務
  • 開啟Keep-Alive復用連接
  • 使用CDN加速靜態資源

7.5 負載測試與監控

  • 工具推薦:
    • ab?(Apache Bench)
    • wrk
    • locust(Python編寫的負載測試工具)
  • 監控指標:QPS、響應時間、錯誤率、CPU/內存使用

八、實戰項目建議

8.1 項目一:簡易聊天服務器(TCP + 多線程)

  • 功能:
    • 客戶端連接并注冊用戶名
    • 支持私聊與群聊
    • 服務器廣播消息
  • 技術點:Socket、線程池、消息協議設計

8.2 項目二:多線程下載管理器

  • 功能:
    • 支持多文件并行下載
    • 顯示下載進度(使用tqdm
    • 斷點續傳(通過Range頭)
  • 技術點:requests、線程、文件IO、異常處理

8.3 項目三:基于WebSocket的實時股票行情推送

  • 使用?websockets?庫或?FastAPI + WebSocket
  • 模擬后臺推送股價變化
  • 前端HTML+JavaScript展示動態圖表
  • 技術點:WebSocket協議、異步推送、前后端交互

8.4 項目四:微型Web框架實現

  • 實現路由解析、請求分發、中間件機制
  • 支持GET/POST,返回HTML或JSON
  • 學習Flask等框架底層原理

九、學習資源推薦

9.1 官方文檔

  • Python socket模塊文檔
  • requests官方文檔
  • asyncio官方文檔
  • FastAPI官方文檔

9.2 社區教程與書籍

  • 《Python網絡編程》(Brandon Rhodes 著)
  • Real Python 網站相關教程
  • Stack Overflow 常見問題解答
  • GitHub開源項目(如aiohttp、twisted)

9.3 開源項目代碼分析

  • requests?源碼閱讀(簡潔優雅)
  • Flask?微框架源碼(理解WSGI)
  • scrapy?架構設計(異步爬蟲引擎)

9.4 性能測試工具介紹

工具特點
ab簡單易用,適合HTTP GET測試
wrk高性能,支持腳本化
locust使用Python編寫測試場景,可視化報告
JMeter功能強大,Java平臺,適合復雜測試

十、附錄:最佳實踐總結

項目推薦做法
新項目HTTP客戶端使用?requests
高并發服務使用?asyncio?或?gevent
快速原型開發使用?http.server?或?Flask
安全通信啟用TLS,避免明文傳輸
錯誤處理捕獲異常,設置超時,重試機制
日志記錄使用?logging?模塊記錄請求與錯誤

結語

網絡編程是現代軟件開發的核心技能之一。掌握Python中的網絡編程不僅能夠幫助你構建Web服務、爬蟲、API接口,還能深入理解分布式系統、微服務架構的基礎原理。

建議學習路徑:

  1. 理解TCP/UDP基礎
  2. 動手寫Socket小程序
  3. 使用requests做HTTP請求
  4. 學習異步編程asyncio
  5. 實戰項目鞏固知識

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

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

相關文章

基于PHP的快遞管理系統的設計與實現

管理員:登錄:管理員可以通過用戶名和密碼登錄系統,進入管理員后臺管理界面。個人中心:管理員可以查看和編輯個人信息,如姓名、聯系方式等。用戶管理:管理員可以管理系統中的用戶信息,包括添加新…

WPF的C1FlexGrid的單元格回車換行輸入

重寫C1FlexGrid的按鍵事件PreviewKeyDown"flex_PreviewKeyUp" 定義按鍵方法private void flex_PreviewKeyUp(object sender, KeyEventArgs e){if (e.Key Key.Enter){// 獲取當前編輯的單元格var cell CfgReviewItem.Selection;if (cell.Column > 0 && …

簡單部署普羅米修斯(Promethus)與Grafana配置

環境信息:系統版本ubuntu2404k8s版本v1.22.2promethus節點IP192.168.31.210Grafana節點IP192.168.31.210node1節點IP192.168.31.214node2節點IP192.168.31.215部署Promethus(https://prometheus.io/download/) wget https://ghfast.top/https…

Redis 編譯錯誤:缺少靜態庫文件,如何解決?

目錄 一、問題背景 二、問題分析 三、解決方案:手動編譯缺失依賴 四、重新編譯 Redis 主程序 五、小結與補充建議 一、問題背景 在從源代碼編譯 Redis(如 8.0.3 版本)時,很多開發者可能會遇到如下錯誤信息: /us…

vscode+latex本地英文期刊環境配置

1、首先進行vscode的配置安裝,這個網上很多教程直接安裝就可以,我建議安裝vscode就行(https://code.visualstudio.com/Download),vs studio稍微有點復雜而且有點大沒必要,單寫論文和簡單的代碼編譯&#xf…

8.6 CSS3rem布局

rem布局 rem (font size of the root element)是指相對于根元素的字體大小的單位。簡單的說它就是一個相對單位。看到rem大家一定會想起em單位,em(font size of the element)是指相對于父元素的字體大小的單位。它們之…

第十五章、非合作關系設定下的多智能體強化學習

0 前言 根據上一章的內容,已知完全合作關系下的多智能體利益一致有相同的目標,而非合作關系下實際上智能體的獎勵和回報都是不一樣的,它們都在努力讓自己的利益最大化而并不考慮整體利益。 1 非合作關系設定下的策略學習要注意的點&#xff1…

分布式微服務--GateWay(過濾器及使用Gateway注意點)

前言、Spring Cloud Gateway 與 Web 依賴沖突 <!-- 下面兩個依賴不能同時使用 --><!-- Gateway 組件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><ve…

latex in overleaf快速通關論文排版

文章目錄 0 有效連接匯總 1 簡介 1.1 latex是什么 1.2 overleaf是什么? 2 快速上手 步驟1 注冊 步驟2 使用 (1) 找模板 (2) 整體論文的overleaf結構 (3) 編輯內容 打開可視化編輯 實時編譯 編輯 (4) 導出 3 常規操作 3.1 公式 3.2 表格 3.3 圖片 3.4 引用 3.5 代碼塊 3.6 設置…

OO SALV的欄位功能

SALV的欄位功能主要是通過CL_SALV_COLUMN_TABLE和CL_SALV_COLUMNS_TABLE這兩個類的實現的。 SALV的欄位屬性的詳細功能包括異常狀態圖標、圖標、符號、復選框、按鈕、熱點、超鏈接、單元格類型、單元格顏色、某一欄位顏色、某一行顏色&#xff0c;欄位隱藏等。關于顏色等樣式屬…

第2章:建模篇——第1節:點線面的選擇與控制

目錄 1.模式的切換 &#xff08;1&#xff09;編輯模式的切換 &#xff08;2&#xff09;點線面的切換 2.點線面的選擇 &#xff08;1&#xff09;選擇的設置 &#xff08;2&#xff09;循環選擇 3.點線面的控制 4.總結 1.模式的切換 &#xff08;1&#xff09;編輯模…

深入解析嵌套事務:原理與應用

嵌套事務是指在事務執行過程中啟動另一個事務形成的層級調用結構&#xff0c;主要用于處理跨服務或復雜業務場景的事務一致性控制。其核心是通過事務傳播機制管理多個操作的原子性&#xff0c;具體原理和應用如下&#xff1a;一、核心概念與工作原理層級結構 嵌套事務由頂層事務…

[激光原理與應用-168]:測量儀器 - 對光學指標進行測量的儀器

一、基礎光學參數測量儀器 - 頻率/波長/功率光學顯微鏡用途&#xff1a;觀察微小物體的顯微圖像&#xff0c;用于材料科學、生物學等領域。特點&#xff1a;高放大倍數和分辨率&#xff0c;可清晰顯示微觀結構。光譜分析儀用途&#xff1a;測量發光體的輻射光譜&#xff0c;分析…

MPC-in-the-Head 轉換入門指南

1. 引言 本文將探討構建零知識證明&#xff08;ZKP&#xff09;的一種非常有趣的方法&#xff1a; MPC-in-the-Head Transformation&#xff08;轉換&#xff09;。 該方法最早由 2007 年的論文 Zero-knowledge from secure multiparty computation 提出&#xff0c;通常被稱…

SpringBoot的優缺點

題目詳細答案優點快速開發&#xff1a;Spring Boot 通過自動配置和大量的開箱即用功能&#xff0c;使得開發者可以快速啟動和運行一個應用程序&#xff0c;無需進行繁瑣的配置工作。簡化配置&#xff1a;Spring Boot 提供了自動配置和 "starter" 依賴&#xff0c;簡化…

[激光原理與應用-171]:測量儀器 - 能量型 - 激光能量計(單脈沖能量測量)

一、工作原理激光能量計通過光電效應或光熱效應將激光脈沖能量轉換為可測量的物理信號&#xff0c;核心原理可分為兩類&#xff1a;光電型原理光電效應&#xff1a;激光照射光電材料&#xff08;如硅、硒化鋅&#xff09;時&#xff0c;光子激發電子產生光電流或光電壓。通過測…

四、應急響應

一、linux入侵排查 思路: 1、查看帳號 查看/etc/passwd文件中使用 /bin/bash 作為默認 shell 的用戶。 查詢特權用戶特權用戶(uid 為0) 查詢可以遠程登錄的帳號信息 除root帳號外&#xff0c;其他帳號是否存在sudo權限。 禁用或刪除多余及可疑的帳號 用find命令查看擁有…

類和對象(中):類的默認成員函數、構造函數、析構函數

&#x1f525;個人主頁&#xff1a;胡蘿卜3.0 &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》《數據結構》 《C干貨分享》 ??人生格言&#xff1a;不試試怎么知道自己行不行 目錄 一、類的默認成員函數 二、構造函數 三…

如何優雅地刷力扣 LeetCode - Easy

Source 力扣LeetCode題庫 App > LeetCode > 題庫 > 題解 Notes 仔細審題&#xff0c;明確輸入輸出&#xff0c;通過測試用例。先特殊&#xff0c;后尋常。逆向思維。 在條件語句中用!代替&#xff0c;提前終止循環&#xff0c;減少嵌套層級&#xff08;else&#…

AI繪畫:生成唐初程咬金全身像提示詞

根據唐代歷史記載和藝術形象特征&#xff0c;以下是優化后的中文Midjourney 提示詞&#xff0c;突出程咬金的猛將氣質與唐初甲胄細節&#xff1a; 核心提示詞&#xff08;戰場形象&#xff09; 中年猛將程咬金&#xff0c;全身甲胄像&#xff0c;唐初光要甲制式&#xff1a;身…