Python 網絡編程入門

目錄

一、前言

二、網絡通信基礎12:TCP 與 UDP 協議解析

2.1 TCP 協議:可靠的面向連接通信

2.2 UDP 協7議:無連接的快速通信

2.3 Sock12et:網絡通信的基石

三、TCP 編程實15戰:從單工通信到雙向聊天

3.1 TCP 客戶端與服務器基礎示例

3.2 雙向聊天1819應用:實時交互的 TCP 通信

四、UDP 編程實戰:無連接的快速數據傳輸

4.1 UDP 客戶端與服務器基礎示例

五、協議對比與應24用場景選擇

六、總結與拓展


一、前言

隨著互聯網的普及,網絡通信已成為計算機應用的核心。Python 憑借簡潔易用的特性,成為網絡編程的熱門選擇。本文將深入解析 TCP 與 UDP 協議的原理,通過 Socket 編程實現網絡通信,并帶你完成一個簡易聊天應用的開發,幫助你快速掌握 Python 網絡編程的核心技能。

二、網絡通信基礎12:TCP 與 UDP 協議解析

2.1 TCP 協議:可靠的面向連接通信

TCP(傳輸控制協議)通過三次握手建立連接四次揮手斷開連接,確保數據可靠、有序傳輸。其核心特性包括:

  • 面向連接:通信前需先建立連接(如打電話需先撥號)。
  • 可靠性:通過序3列號、確認應答、重傳機制確保數據不丟失(類似快遞追蹤系統)。
  • 流量控制:利用4滑動窗口技術避免接收方處理過載(如水管調節水流速度)。
  • 有序性:按序號5重組數據包,保證數據順序正確。

典型應用場景:文6件傳輸(FTP)、電子郵件(SMTP)、網頁瀏覽(HTTP)等對可靠性要求高的場景。

2.2 UDP 協7議:無連接的快速通信

UDP(用戶數據報協議)無需建立連接,直接發送數據,具有以下特點:

  • 無連接:省去握手過程,通信效率高(類似發短信,無需等待對方接聽)。
  • 不可靠傳輸:不8保證數據到達或順序,可能丟包或亂序。
  • 速度快:無額外9開銷,適合實時性場景(如在線游戲、視頻會議)。
  • 支持廣播 / 多播10:可同時向多個接收方發送數據。

典型應用場景:實11時音視頻傳輸(如 WebRTC)、傳感器數據采集、域名解析(DNS)等。

2.3 Sock12et:網絡通信的基石

Socket 是網絡編程的抽象層,Python 通過socket模塊實現 Socket 接口。關鍵概念包括:

地址族AF_INET(IPv4)、AF_INET6(IPv6)。

協議類型S{insert\_element\_11\_}OCK_STREAM(TCP)、SOCK_DGRAM(UDP)。

通過 Socket,我們可14以輕松實現客戶端與服務器的通信,無論是建立連接(TCP)還是直接發送數據(UDP)。

三、TCP 編程實15戰:從單工通信到雙向聊天

3.1 TCP 客戶端與服務器基礎示例

客戶端代碼(單向通信)

import socketdef tcp_client():# 創建TCP Socket(IPv4 + TCP協議)client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接服務器(本地回環地址,端口12345)client_socket.connect(("127.0.0.1", 12345))# 發送數據(需編碼為字節流)client_socket.send("Hello, Server".encode("utf-8"))# 接收響應(最多1024字節)response = client_socket.recv(1024)print("Received from server:", response.decode("utf-8"))# 關閉連接client_socket.close()if __name__ == "__main__":tcp_client()

服務器代碼(單向響應)

import socketdef tcp_server():# 創建TCP Socket并綁定地址server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(("127.0.0.1", 12345))# 開始監聽(最大連接數5)server_socket.listen(5)print("Server is listening...")while True:# 接受客戶端連接client_socket, client_addr = server_socket.accept()print(f"Connection from {client_addr}")# 接收數據message = client_socket.recv(1024)# 發送響應(需編碼為字節流)client_socket.send(b"Hello, Client")# 關閉客戶端連接client_socket.close()if __name__ == "__main__":tcp_server()

代碼關鍵點

connect():客戶端主動連接服務器。

bind():服務16器綁定 IP 和端口,固定通信入口。

listen()與17accept():服務器監聽并接受連接請求。

數據需通過encod{insert\_element\_16\_}e()decode()完成字節流與字符串的轉換。

3.2 雙向聊天1819應用:實時交互的 TCP 通信

客戶端(支持持續輸入)

import socketdef tcp_chat_client():client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(("127.0.0.1", 12345))while True:# 獲取用戶輸入message = input("You: ")if message.lower() == "exit":break  # 輸入exit退出# 發送消息client_socket.send(message.encode("utf-8"))# 接收服務器響應response = client_socket.recv(1024)print(f"Server: {response.decode('utf-8')}")client_socket.close()if __name__ == "__main__":tcp_chat_client()

服務器(支持雙向對話)

import socketdef tcp_chat_server():server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(("127.0.0.1", 12345))server_socket.listen(5)print("Server is waiting for connection...")# 接受客戶端連接client_socket, client_addr = server_socket.accept()print(f"Connection established with {client_addr}")while True:# 接收客戶端消息message = client_socket.recv(1024)if not message:break  # 無數據則退出print(f"Client: {message.decode('utf-8')}")# 服務器輸入響應response = input("You: ")client_socket.send(response.encode("utf-8"))client_socket.close()server_socket.close()if __name__ == "__main__":tcp_chat_server()

運行效果

# 客戶端
You: 你好,服務器!
Server: 你好,客戶端!
You: exit# 服務器
Connection established with ('127.0.0.1', 50001)
Client: 你好,服務器!
You: 你好,客戶端!

四、UDP 編程實戰:無連接的快速數據傳輸

4.1 UDP 客戶端與服務器基礎示例

客戶端代碼(無連接發送)

import socketdef udp_client():# 創建UDP Socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 直接發送數據(需指定目標地址)client_socket.sendto("Hello, UDP Server".encode("utf-8"), ("127.0.0.1", 12345))# 接收響應(返回數據和服務器地址)response, server_addr = client_socket.recvfrom(1024)print(f"Received from {server_addr}: {response.decode('utf-8')}")client_socket.close()if __name__ == "__main__":udp_client()

服務器代碼(無連接接收)

import socketdef udp_server():server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server_socket.bind(("127.0.0.1", 12345))print("Server is listening...")while True:# 接收數據(返回數據和客戶端地址)message, client_addr = server_socket.recvfrom(1024)print(f"Received from {client_addr}: {message.decode('utf-8')}")# 向客戶端發送響應server_socket.sendto(b"Hello, UDP Client", client_addr)if __name__ == "__main__":udp_server()

代碼關鍵點

sendto():UDP 無需連接,直接指定目標地址發送。

recvfrom(){insert\_element\_18\_}:接收數據時同時獲取發送方地址。

connect(){insert\_element\_19\_}accept()步驟,通信流程更簡單。

五、協議對比與應24用場景選擇

特性TCPUDP
連接方式面向連接(需握手)無連接(直接發送)
可靠性可靠(重傳機制)不可靠(可能丟包)
傳輸速度較慢(額外開銷)較快(無連接開銷)
適用場景文件傳輸、郵件、HTTP實時游戲、視頻流、DNS 查詢
Python 協議類型SOCK_STREAMSOCK_DGRAM

選擇建議

需要數據完整性:優先選 TCP(如用戶登錄、訂單系統)。

追求實時性:優先選 UDP(如直播彈幕、傳感器數據上報)。

六、總結與拓展

本文通過理論解析和代碼示例,帶你掌握了 Python 網絡編程的核心要點:

  1. TCP/UDP 協議:理解可靠連接與無連接通信的本質區別。
  2. Socket 編程25:學會使用socket模塊實現客戶端與服務器通信。
  3. 實戰案例:完成了 TCP 單向通信、雙向聊天和 UDP 簡單交互的程序開發

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

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

相關文章

Django壓縮包形式下載文件

通過web將minio上的文件以壓縮包-文件夾-文件的形式下載到本地 import os from bx_mes import settings from io import BytesIO import zipfile from django.http import StreamingHttpResponse class FileRemote(GenericAPIView):def post(self,request):# 壓縮包名folder_n…

Enhancing Relation Extractionvia Supervised Rationale Verifcation and Feedback

Enhancing Relation Extraction via Supervised Rationale Verification and Feedback| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.php/AAAI/article/view/34631 1. 概述 關系抽取(RE)任務旨在抽取文本中實體之間的語義關

【RAG】ragflow源碼亮點:文檔embedding向量化加權融合

引言: 最近在看ragflow源碼,其中有一個較為巧妙地設計:分別將 文字 、 標題 行向量化 之后,直接根據權重,進行加法運算,得到向量融合,增強了文本向量化的表示能力,這里開始討論一下…

限流系列:sentinel

目錄 滑動窗口算法 Sentinel 數據模型 示例 大致流程 ???????entry ???????entryWithPriority ???????FlowSlot.entry ???????checkFlow ???????canPass ???????avgUsedTokens ???????passQps ???????pa…

Java 訪問者模式深度重構:從靜態類型到動態行為的響應式設計實踐

一、訪問者模式的本質與核心價值 在軟件開發的漫長演進中,設計模式始終是架構師手中的利刃。當我們面對復雜對象結構上的多種操作需求時,訪問者模式(Visitor Pattern)猶如一把精密的手術刀,能夠優雅地分離數據結構與作…

UE 5 C++設置物體位置和旋轉,初始化虛幻引擎樣條線、加載引用虛幻編輯器中的藍圖、設置虛幻編輯器中Actor大小

一、設置物體位置和旋轉 UE.cpp文件中代碼: Mesh->SetWorldLocationAndRotation(FVector(50.0f, 50.0f, 50.0f),FRotator(0,-90,0)); vs代碼編輯器中旋轉信息順序(yzx): Pitch、 Yaw、 Roll UE編輯器中旋轉信息順序&#xf…

【文本分類】KG-HTC 知識圖譜提升分類準確率

最近看到一篇論文“KG-HTC: Integrating Knowledge Graphs into LLMs for Effective Zero-shot Hierarchical Text Classification”,介紹了文本分類的技巧,這篇文航主要利用了知識圖譜大模型的思路,實驗效果不錯,里面的一些論述也…

三大微調技術對比:Prompt/Prefix/P-Tuning

Prompt Tuning、Prefix Tuning和P - Tuning的區別 概念方面: Prompt Tuning:在輸入序列前添加可訓練的額外Token以適配下游任務,預訓練語言模型參數不變。比如在文本分類中,在句子前加特定Token如“(OPINION)”,讓模型理解是對觀點進行分類的任務。Prefix Tuning:在每層T…

14.「實用」扣子(coze)教程 | Excel文檔自動批量AI文檔生成實戰,中級開篇

隨著AI編程工具及其能力的不斷發展,編程將變得越來越簡單。 在這個大趨勢下,大師兄判斷未來的編程將真正成為像office工具一樣的辦公必備技能。每個人通過 (專業知識/資源編程)將自己變成一個復合型的人才,大大提高生…

量子-經典協同計算新路徑:NISQ 時代混合算法對后量子密碼學的適應性探索

內容來源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨浪味仙 行業動向:3700字丨10分鐘閱讀 5 月 20 日,由北京量子院、清華大學、數學工程與先進計算國家重點實驗室、南洋理工大學、量子信息前沿科學中心…

CentOS中安裝Docker Compose

在CentOS中安裝Docker Compose的步驟如下: 步驟 1:確保Docker已安裝 Docker Compose依賴Docker環境,請先安裝Docker: # 添加Docker官方倉庫 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://downlo…

電商小程序店鋪詳情頁:頭部無限分類與篩選功能實現

電商小程序店鋪詳情頁:頭部無限分類與篩選功能實現 一、場景需求與技術選型二、頭部無限分類導航三、篩選功能實現:Picker多列選擇組件一、場景需求與技術選型 在電商小程序生態中,店鋪詳情頁作為用戶瀏覽商品的核心流量入口,其交互效率與功能完整性直接影響商品轉化率。傳…

Graph Neural Network(GNN)

我們首先要了解什么是圖,圖是由節點和邊組成的,邊的不一樣也導致節點的不同(參考化學有機分子中的碳原子) gnn可以處理classification的問題,也就是分類的問題 也可以處理generation的問題 借一部日劇來說明,這個日劇是講主角尋找殺害他父親的兇手的,劇中的人物有姓名和特征 …

FallbackHome的啟動流程(android11)

首次開機開機動畫播完進入Launcher桌面時黑屏進入Launcher,有黑屏不太美觀,在重啟以后會在進入桌面后會顯示android正在啟動等一會進入Launcher,這就是系統FallBackHome機制 接下來我們跟著代碼看下首次啟動系統如何進入FallbackHome的 在SystemServer的startOthe…

【EdgeYOLO】《EdgeYOLO: An Edge-Real-Time Object Detector》

Liu S, Zha J, Sun J, et al. EdgeYOLO: An edge-real-time object detector[C]//2023 42nd Chinese Control Conference (CCC). IEEE, 2023: 7507-7512. CCC-2023 源碼:https://github.com/LSH9832/edgeyolo 論文:https://arxiv.org/pdf/2302.07483 …

宮格導航--純血鴻蒙組件庫AUI

摘要: 宮格導航(A_GirdNav):可設置導航數據,建議導航項超過16個,可設置“更多”圖標指向的頁面路由。最多顯示兩行,手機每行最多顯示4個圖標,折疊屏每行最多6個圖標,平板每行最多8個圖標。多余圖…

調試的按鈕

在Debug的時候,會有一些按鈕,我們需要知道它們各自的作用。 注:調試器本身并沒有一個直接的、可以撤銷已執行代碼效果的“返回上一步(Undo Last Step)”或“逆向執行(Reverse Debugging)”按鈕…

人工智能如何協助老師做課題

第一步:在騰訊元寶對話框中輸入如何協助老師做課題,通過提問,我們了解了老師做課題的步驟和建議。 第二步:開題報告提問,騰訊元寶對話框中,輸入“大單元視域下小學數學教學實踐研究課題開題報告。”......…

OpenGL Chan視頻學習-5 Vertex Attributes and Layouts in OpenGL

bilibili視頻鏈接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 一、知識點整理 1.1.OpenGL管線工作流程 為顯卡提供繪制的所有數據,并將數據存儲在GPU內存使用著色器&…

Linux_編輯器Vim基本使用

?? 歡迎大家來到小傘的大講堂?? 🎈🎈養成好習慣,先贊后看哦~🎈🎈 所屬專欄:LInux_st 小傘的主頁:xiaosan_blog 制作不易!點個贊吧!!謝謝喵!&a…