Python實現網絡通信:Socket模塊與TCP/IP協議全解析

Langchain系列文章目錄

01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南
02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋
03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南
04-玩轉 LangChain:從文檔加載到高效問答系統構建的全程實戰
05-玩轉 LangChain:深度評估問答系統的三種高效方法(示例生成、手動評估與LLM輔助評估)
06-從 0 到 1 掌握 LangChain Agents:自定義工具 + LLM 打造智能工作流!

python系列文章目錄

01-Python 基礎語法入門:從變量到輸入輸出,零基礎也能學會!
02-Python 流程控制終極指南:if-else 和 for-while深度解析
03-Python 列表與元組全攻略:從新手到高手的必備指南
04-Python 字典與集合:從入門到精通的全面解析
05-Python函數入門指南:從定義到應用
06-Python 函數高級特性:從默認參數到閉包的全面解析
07-Python 模塊與包:從零到自定義的全面指南
08-Python異常處理:從入門到精通的實用指南
09-Python 文件操作:從零基礎到日志記錄實戰
10-Python面向對象編程入門:從類與對象到方法與屬性
11-Python類的方法與屬性:從入門到進階的全面解析
12-Python繼承與多態:提升代碼復用與靈活性的關鍵技術
13-掌握Python魔法方法:如何用__add__和__len__自定義類的行為
14-python面向對象編程總結:從基礎到進階的 OOP 核心思想與設計技巧
15-掌握 Python 高級特性:深入理解迭代器與生成器
16-用 Python 裝飾器提升效率:日志與權限驗證案例
17-再也不怕資源泄漏!Python 上下文管理器,with語句全攻略
18-Python 標準庫必備模塊:math、random、os、json 全解析
19-Python 性能優化:從入門到精通的實用指南
20-Python內存管理與垃圾回收全解析
21-Python 代碼調試與測試:從 pdb 到 TDD 的全面指南
22-Python 代碼風格終極指南:從 PEP 8 到最佳實踐全解析
23-Python實現網絡通信:Socket模塊與TCP/IP協議全解析


文章目錄

  • Langchain系列文章目錄
  • python系列文章目錄
  • 前言
  • 一、TCP/IP協議概述
    • 1.1 什么是TCP/IP協議
    • 1.2 TCP/IP協議的分層結構
      • 1.2.1 應用層
      • 1.2.2 傳輸層
      • 1.2.3 網絡層
      • 1.2.4 鏈路層
  • 二、使用`socket`模塊實現網絡通信
    • 2.1 什么是`socket`
    • 2.2 創建`socket`對象
    • 2.3 `socket`的基本方法
      • 2.3.1 綁定地址和端口
      • 2.3.2 監聽連接
      • 2.3.3 接受連接
      • 2.3.4 發送和接收數據
  • 三、客戶端與服務器端程序
    • 3.1 服務器端程序
      • 3.1.1 創建服務器`socket`
      • 3.1.2 綁定地址和端口
      • 3.1.3 監聽連接
      • 3.1.4 接受客戶端連接
      • 3.1.5 處理客戶端請求
    • 3.2 客戶端程序
      • 3.2.1 創建客戶端`socket`
      • 3.2.2 連接服務器
      • 3.2.3 發送數據
      • 3.2.4 接收數據
  • 四、總結

前言

在互聯網時代,網絡編程是每個開發者都值得掌握的核心技能之一。從網頁瀏覽到即時聊天,再到物聯網設備之間的通信,網絡編程無處不在。作為Python學習旅程的第23天,我們將邁入網絡編程的世界,探索其基礎知識。本文將從TCP/IP協議的基本概念講起,逐步深入到使用Python的socket模塊實現網絡通信,并通過實際代碼帶你編寫客戶端和服務器端程序。

無論你是初學者還是有一定經驗的開發者,這篇文章都將為你提供清晰的知識框架和實用的代碼示例。讓我們一起開啟這場網絡編程的探索之旅吧!


一、TCP/IP協議概述

網絡編程的核心在于理解通信協議,而TCP/IP協議是互聯網的基石。本節將帶你了解它的基本概念和分層結構,幫助你建立網絡通信的整體認知。

1.1 什么是TCP/IP協議

TCP/IP協議全稱“傳輸控制協議/網際協議”,是一組用于實現網絡通信的協議集合。它定義了設備如何連接到網絡,以及數據如何在設備間傳輸。簡單來說,TCP/IP就像網絡世界的“交通規則”,確保數據能夠準確、高效地到達目的地。

  • TCP(傳輸控制協議):負責數據的可靠傳輸,保證數據按順序到達且不丟失。
  • IP(網際協議):負責數據的尋址和路由,決定數據從哪里發到哪里。

1.2 TCP/IP協議的分層結構

TCP/IP協議采用四層模型,每一層都有明確的功能。通過分層設計,網絡通信變得模塊化且易于理解。

1.2.1 應用層

應用層是用戶直接接觸的部分,負責處理應用程序的通信需求。例如:

  • HTTP:瀏覽網頁時使用。
  • FTP:傳輸文件時使用。
  • SMTP:發送郵件時使用。

1.2.2 傳輸層

傳輸層確保數據的端到端傳輸,提供可靠性或高效性兩種選擇:

  • TCP:面向連接,保證數據完整,適用于需要高可靠性的場景(如文件下載)。
  • UDP:無連接,速度快但不保證數據到達,適用于實時性要求高的場景(如視頻直播)。

1.2.3 網絡層

網絡層負責數據的路由和轉發,核心協議是IP。它為每臺設備分配一個IP地址,并決定數據包的傳輸路徑。

1.2.4 鏈路層

鏈路層是最底層,負責將數據封裝成幀并通過物理網絡(如以太網或Wi-Fi)傳輸。它處理硬件相關的工作,如MAC地址。

通過這四層的協作,TCP/IP協議讓網絡通信變得井然有序。如下圖展示了其分層結構:

應用層
HTTP, FTP, SMTP
傳輸層
TCP, UDP
網絡層
IP
鏈路層
以太網, Wi-Fi

二、使用socket模塊實現網絡通信

Python提供了強大的socket模塊,讓我們能夠輕松實現網絡通信。本節將從socket的基本概念入手,逐步講解它的用法。

2.1 什么是socket

socket(套接字)是網絡通信的橋梁,可以看作是應用程序與網絡之間的“插座”。通過socket,程序可以發送和接收數據,實現設備間的通信。

  • 應用場景:聊天軟件、文件傳輸工具、Web服務器等都離不開socket
  • 類型:常見的有TCP socket(可靠傳輸)和UDP socket(快速傳輸)。

2.2 創建socket對象

在Python中,使用socket模塊的socket()函數創建socket對象。需要指定地址族和套接字類型:

import socket# 創建TCP socket (AF_INET表示IPv4,SOCK_STREAM表示TCP)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • 地址族AF_INET表示IPv4,AF_INET6表示IPv6。
  • 類型SOCK_STREAM用于TCP,SOCK_DGRAM用于UDP。

2.3 socket的基本方法

創建socket后,我們可以通過一系列方法實現通信。以下是常用的操作步驟:

2.3.1 綁定地址和端口

服務器端需要將socket綁定到特定的IP地址和端口號,以便客戶端可以找到它:

# 綁定到本機IP (127.0.0.1) 和端口8080
sock.bind(('127.0.0.1', 8080))
  • 參數:一個元組,包含IP地址(字符串)和端口號(整數)。
  • 常見問題:如果端口被占用,會拋出OSError,可以嘗試換一個端口。

2.3.2 監聽連接

綁定后,服務器端需要調用listen()開始監聽客戶端連接:

# 監聽連接,5表示最大等待連接數
sock.listen(5)

2.3.3 接受連接

當客戶端發起連接時,服務器使用accept()接受連接,返回一個新的socket對象和客戶端地址:

# 接受連接
client_sock, client_addr = sock.accept()
print(f"連接來自:{client_addr}")
  • 返回值client_sock用于與該客戶端通信,client_addr是客戶端的IP和端口。

2.3.4 發送和接收數據

通信的核心是數據的發送和接收,使用send()recv()方法:

# 發送數據 (數據需為字節類型)
client_sock.send(b"Hello, client!")# 接收數據 (1024表示最大接收字節數)
data = client_sock.recv(1024)
print(f"收到數據:{data.decode()}")
  • 注意:發送數據前需編碼(如encode()),接收后需解碼(如decode())。

三、客戶端與服務器端程序

掌握了socket的基本用法后,我們通過實際代碼實現一個簡單的客戶端-服務器通信系統。服務器端接收消息并回顯,客戶端發送消息并顯示響應。

3.1 服務器端程序

服務器端程序負責監聽連接并處理客戶端請求。以下是完整實現:

3.1.1 創建服務器socket

import socket# 創建TCP socket
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3.1.2 綁定地址和端口

# 綁定到本機8080端口
server_sock.bind(('127.0.0.1', 8080))

3.1.3 監聽連接

# 開始監聽
server_sock.listen(5)
print("服務器啟動,監聽端口8080...")

3.1.4 接受客戶端連接

while True:# 接受連接client_sock, client_addr = server_sock.accept()print(f"客戶端 {client_addr} 已連接")

3.1.5 處理客戶端請求

    # 處理請求while True:data = client_sock.recv(1024)if not data:  # 客戶端斷開時data為空breakprint(f"收到消息:{data.decode()}")client_sock.send(data)  # 回顯消息client_sock.close()

完整代碼

import socketserver_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('127.0.0.1', 8080))
server_sock.listen(5)
print("服務器啟動,監聽端口8080...")while True:client_sock, client_addr = server_sock.accept()print(f"客戶端 {client_addr} 已連接")while True:data = client_sock.recv(1024)if not data:breakprint(f"收到消息:{data.decode()}")client_sock.send(data)client_sock.close()

運行結果:啟動后,服務器會等待客戶端連接,并回顯收到的消息。

3.2 客戶端程序

客戶端程序主動連接服務器,發送消息并接收響應。

3.2.1 創建客戶端socket

import socket# 創建TCP socket
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3.2.2 連接服務器

# 連接服務器
client_sock.connect(('127.0.0.1', 8080))

3.2.3 發送數據

# 發送消息
client_sock.send(b"Hello, server!")

3.2.4 接收數據

# 接收響應
data = client_sock.recv(1024)
print(f"服務器響應:{data.decode()}")
client_sock.close()

完整代碼

import socketclient_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('127.0.0.1', 8080))
client_sock.send(b"Hello, server!")
data = client_sock.recv(1024)
print(f"服務器響應:{data.decode()}")
client_sock.close()

運行步驟

  1. 先運行服務器端代碼。
  2. 再運行客戶端代碼,觀察服務器端的輸出和客戶端的響應。

常見問題排查

  • 連接失敗:檢查服務器是否已啟動,IP和端口是否正確。
  • 數據亂碼:確保發送和接收時編碼一致(如都用UTF-8)。

四、總結

通過本篇文章,我們從TCP/IP協議的基礎知識入手,了解了網絡通信的原理;接著通過socket模塊掌握了Python網絡編程的基本方法;最后通過代碼示例實現了客戶端與服務器端的通信。這為你后續學習更復雜的網絡編程奠定了基礎。


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

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

相關文章

click house擴容方案

《ClickHouse擴容方案解析》 當我們談論數據庫的時候,尤其是像ClickHouse這樣專為處理大規模數據分析而設計的列式存儲數據庫時,擴容是一個不可避免的話題。隨著數據量的增長和查詢復雜度的提升,原有的硬件資源可能不足以支撐高效的查詢響應…

【AGI】智譜開源2025:一場AI技術民主化的革命正在到來

智譜開源2025:一場AI技術民主化的革命正在到來 引言:開源,一場技術平權的革命一、CogView4:中文AI生成的里程碑1. 破解漢字生成的“AI魔咒”2. 開源協議與生態賦能 二、AutoGLM:人機交互的范式躍遷1. 自然語言驅動的跨…

java8中young gc的垃圾回收器選型,您了解嘛

在 Java 8 的 Young GC(新生代垃圾回收)場景中,對于 ToC的場景,即需要盡可能減少垃圾回收停頓時間以滿足業務響應要求的場景,以下幾種收集器各有特點,通常 Parnew和 G1 young表現較為出色,下面詳…

【數學 矩陣快速冪】P7108 移花接木|普及+

本文涉及知識點 數學 移花接木 題目背景 遙遠的圣地生長著一棵不為人知的靈樹,或有萬山之高。 但有一日,藏匿于根系的腐朽力量爆發,靈樹已無法支撐往日屹立沖天的高度。 題目描述 靈樹最初的形態可以看作一棵高度為 10 10 10 10 {10}…

2025-03-09 學習記錄--C/C++-PTA 習題10-7 十進制轉換二進制

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、題目描述 ?? 裁判測試程序樣例&#xff1a; #include <stdio.h>void dectobin( int n );int main() {int n;scanf(…

前端 | CORS 跨域問題解決

問題&#xff1a;Access to fetch at http://localhost:3000/save from origin http://localhost:5174 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the request…

fastapi房產銷售系統

說明&#xff1a; 我希望用fastapi寫幾個接口&#xff0c;查詢房產交易系統的幾條數據&#xff0c;然后在postman里面測試 查詢客戶所有預約記錄&#xff08;含房源信息&#xff09;需要對應銷售經理查詢客戶所有訂單&#xff08;含房源信息&#xff09;統計銷售經理名下所有房…

導軌式ARM工業控制器:組態軟件平臺的“神經中樞”

工業自動化領域&#xff0c;組態軟件平臺扮演著至關重要的角色。它不僅是工業控制系統的“大腦”&#xff0c;更是實現智能化、高效化生產的關鍵工具。而作為組態軟件平臺的硬件支撐&#xff0c;導軌式ARM工控機&#xff08;以下簡稱“工控機”&#xff09;憑借其緊湊的設計、強…

每日一題——矩陣置零問題的原地算法

矩陣置零問題的原地算法 問題描述示例約束條件進階要求 問題分析難點分析解題思路 代碼實現代碼說明 測試用例測試用例 1測試用例 2測試用例 3 總結 問題描述 給定一個 m x n 的矩陣&#xff0c;如果矩陣中的某個元素為 0&#xff0c;則需要將其所在的行和列的所有元素都置為 …

Springboot中的@Value注解:用法與潛在問題探索

在Spring Boot開發中&#xff0c;有個非常實用的注解&#xff0c;那就是Value&#xff01;它可以幫助我們輕松地從配置文件中讀取屬性值。想象一下&#xff0c;在應用程序中管理各種配置&#xff0c;比如數據庫連接信息、服務URL或者API密鑰等&#xff0c;使用Value是多么方便呀…

C++后端服務器開發技術棧有哪些?有哪些資源或開源庫拿來用?

一、 C后臺服務器開發是一個涉及多方面技術選擇的復雜領域&#xff0c;特別是在高性能、高并發的場景下。以下是C后臺服務器開發的一種常見技術路線&#xff0c;涵蓋了從基礎到高級的技術棧。 1. 基礎技術棧 C標準庫 C11/C14/C17/C20&#xff1a;使用現代C特性&#xff0c;如…

25年攜程校招社招求職能力北森測評材料計算部分:備考要點與誤區解析

在求職過程中&#xff0c;能力測評是篩選候選人的重要環節之一。對于攜程這樣的知名企業&#xff0c;其能力測評中的材料計算部分尤為關鍵。許多求職者在備考時容易陷入誤區&#xff0c;導致在考試中表現不佳。本文將深入解析材料計算部分的實際考察方向&#xff0c;并提供針對…

golang進階知識專項-理解值傳遞

在 Go 語言中&#xff0c;所有函數的參數傳遞都是值傳遞&#xff08;Pass by Value&#xff09;。當你將一個變量作為參數傳遞給函數時&#xff0c;實際上傳遞的是該變量的副本&#xff0c;而不是變量本身。理解這一點對于避免常見的編程錯誤至關重要。根據不同的類型&#xff…

RuoYi框架添加自己的模塊(學生管理系統CRUD)

RuoYi框架添加自己的模塊&#xff08;學生管理系統&#xff09; 框架順利運行 首先肯定要順利運行框架了&#xff0c;這個我不多說了 設計數據庫表 在ry數據庫中添加表tb_student 表字段如圖所示 如圖所示 注意id字段是自增的 注釋部分是后面成功后前端要展示的部分 導入…

中級網絡工程師面試題參考示例(1)

一、基礎理論 1. OSI七層模型與TCP/IP四層模型的區別是什么&#xff1f;請舉例說明第三層&#xff08;網絡層&#xff09;和第四層&#xff08;傳輸層&#xff09;的核心協議。 參考答案&#xff1a; OSI七層模型分為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用…

RHCE9.0版本筆記5:防火墻的本地/遠程登錄方式

一、防火墻登錄方式全景圖 華為防火墻支持多種管理訪問方式&#xff0c;根據安全等級和場景需求可分為&#xff1a; graph LR A[管理方式] --> B[本地登錄] A --> C[遠程登錄] B --> B1(Console) B --> B2(Web) C --> C1(SSH) C --> C2(Telnet) C --> C…

2025最新群智能優化算法:山羊優化算法(Goat Optimization Algorithm, GOA)求解23個經典函數測試集,MATLAB

一、山羊優化算法 山羊優化算法&#xff08;Goat Optimization Algorithm, GOA&#xff09;是2025年提出的一種新型生物啟發式元啟發式算法&#xff0c;靈感來源于山羊在惡劣和資源有限環境中的適應性行為。該算法旨在通過模擬山羊的覓食策略、移動模式和躲避寄生蟲的能力&…

博弈論算法

一、減法游戲 初始有一個數 n。 兩個玩家輪流操作&#xff0c;每次可以減去 1 到 9 之間的任意整數。 將數減到 0 的玩家獲勝。 可以發現規律&#xff1a; 減法游戲只需要判斷當前數取模是否為0&#xff0c;即可快速判斷勝負。 例題&#xff1a; Leetcode 292. Nim 游戲 …

Excel·VBA江西省預算一體化工資表一鍵處理

每月制作工資表導出為Excel后都需要調整格式&#xff0c;刪除0數據的列、對工資表項目進行排序、打印設置等等&#xff0c;有些單位還分有“行政”、“事業”2個工資表就需要操作2次。顯然&#xff0c;這種重復操作的問題&#xff0c;可以使用VBA代碼解決 目錄 代碼使用說明1&a…

深度學習驅動的跨行業智能化革命:技術突破與實踐創新

第一章 深度學習的技術范式演進與核心架構 1.1 從傳統機器學習到深度神經網絡的跨越 深度學習的核心在于通過多層次非線性變換自動提取數據特征,其發展歷程可劃分為三個階段:符號主義時代的規則驅動(1950s-1980s)、連接主義時代的淺層網絡(1990s-2000s)以及深度學習時代…