Python中的客戶端和服務端交互的基本內容

目錄

網絡協議

網絡的通信方式

需要安裝的組件和需要導入的包模塊

安裝的組件

導入包模塊

如何創建客戶端

如何創建服務端


網絡協議

IPV4:是互聯網協議的第四版,也是目前廣泛使用的網絡協議。它使用32位地址格式,理論上可以提供約43億個唯一的IP地址。

IPv4地址通常以點分十進制格式表示,例如192.168.1.1。這種協議在互聯網的早期發展中起到了關鍵作用,但由于地址資源有限,隨著互聯網的快速發展,IPv4地址逐漸耗盡。所以為了解決這種情況,所以推出了IPV6

IPV6:是IPv4的下一代協議,旨在解決IPv4地址不足的問題。IPv6使用128位地址格式,能夠提供幾乎無限的地址空間。

IPv6地址通常以冒號分隔的十六進制格式表示,例2001:0db8:85a3:0000:0000:8a2e:0370:7334。除了地址數量的巨大優勢,IPv6還提供了更好的安全性、更高效的路由機制以及對多播和任播的支持。

網絡的通信方式

異步通信

異步通信是一種數據傳輸方式,發送方和接收方的時鐘是獨立的,它們之間沒有嚴格的同步關系。在這種通信方式中,數據通常以字符為單位傳輸,每個字符之間有明確的起始位和停止位來標識數據的開始和結束。異步通信的優點是簡單靈活,適用于低速通信場景,例如串行端口通信。然而,由于沒有嚴格的時鐘同步,數據傳輸效率相對較低,且容易受到噪聲干擾。

同步通信

同步通信則要求發送方和接收方的時鐘嚴格同步。數據以數據塊(如幀)的形式傳輸,每個數據塊的開始和結束由同步信號標識。同步通信的優點是數據傳輸效率高,適合高速通信場景,例如以太網通信。然而,同步通信需要精確的時鐘同步機制,對硬件要求較高,且對噪聲更為敏感。

三次握手

三次握手是TCP協議建立連接的過程。它確保了雙方在通信之前已經準備好,并且能夠正確接收和發送數據。三次握手的過程如下:

  1. SYN(同步序列號):客戶端向服務器發送一個SYN包,請求建立連接,并隨機生成一個初始序列號X

  2. SYN-ACK(同步序列號確認):服務器收到SYN包后,回復一個SYN-ACK包,確認客戶端的請求,并隨機生成自己的初始序列號Y,同時將客戶端的序列號X加1后返回。

  3. ACK(確認):客戶端收到SYN-ACK包后,發送一個ACK包,確認服務器的序列號Y,并將序列號Y加1后返回。此時,連接建立完成。

四次握手

四次握手是TCP協議關閉連接的過程。它確保了雙方在關閉連接之前已經完成所有數據的傳輸。四次握手的過程如下:

  1. FIN(結束):客戶端向服務器發送一個FIN包,表示客戶端已經完成數據發送。

  2. ACK(確認):服務器收到FIN包后,回復一個ACK包,確認客戶端的結束請求。

  3. FIN(結束):服務器在完成自己的數據發送后,也向客戶端發送一個FIN包,表示服務器也已經完成數據發送。

  4. ACK(確認):客戶端收到服務器的FIN包后,回復一個ACK包,確認服務器的結束請求。此時,連接關閉。

需要安裝的組件和需要導入的包模塊

安裝的組件

在進行網絡編程時,通常需要安裝以下組件:

  • 操作系統支持的網絡協議棧:例如TCP/IP協議棧,這是操作系統自帶的,用于支持網絡通信。

  • 編程語言的運行環境:例如Python的Python解釋器、Java的JDK等。

  • 網絡開發工具:例如Wireshark(用于抓包分析)、Postman(用于測試HTTP請求)等。

導入包模塊

在Python中,進行網絡編程通常需要導入以下模塊:

  • socket模塊:用于創建和管理網絡套接字。

  • select模塊:用于實現I/O多路復用。

  • threading模塊:用于實現多線程編程,提高程序的并發能力。

  • asyncio模塊:用于實現異步編程,提高程序的效率。

如何創建客戶端

import socket# 創建socket對象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接到服務器
server_address = ('127.0.0.1', 8080)
client_socket.connect(server_address)try:# 向服務器發送數據message = 'Hello, Server!'client_socket.sendall(message.encode('utf-8'))# 接收服務器響應response = client_socket.recv(1024)print(f"Received: {response.decode('utf-8')}")finally:# 關閉連接client_socket.close()

如何創建服務端

import socket# 創建socket對象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定地址和端口
server_address = ('127.0.0.1', 8080)
server_socket.bind(server_address)# 開始監聽
server_socket.listen(5)
print("Server is listening on port 8080...")try:while True:# 接受客戶端連接client_socket, client_address = server_socket.accept()print(f"Connection from {client_address}")try:# 接收客戶端數據data = client_socket.recv(1024)if data:print(f"Received: {data.decode('utf-8')}")# 向客戶端發送響應response = "Hello, Client!"client_socket.sendall(response.encode('utf-8'))finally:# 關閉客戶端連接client_socket.close()
finally:# 關閉服務器socketserver_socket.close()

注:單獨創建服務端是可以直接運行的,但單獨創建客戶端可以編譯,但是無法運行,因為沒有開啟對服務器的請求處于本地狀態,無法進行數據消息交互傳遞

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

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

相關文章

【硬核攻堅】告別CUDA OOM!DeepSeek部署顯存瓶頸終極解決方案:三大策略高效落地

目錄 引言:大模型落地的“甜蜜”與“煩惱”DeepSeek剖析:為何它如此“吃”顯存?CUDA OOM的“幽靈”:現象、根因與診斷破局之道:三大策略馴服顯存“猛獸” 策略一:模型量化 - 給模型“瘦身”的藝術策略二:動態優化 - 榨干硬件潛能策略三:分布式擴展 - 集群的力量實戰演練…

JavaSE核心知識點01基礎語法01-01(關鍵字、標識符、變量)

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 JavaSE核心知識點01基礎語法01-01&#xff0…

【最新Python包管理工具UV的介紹和安裝】

介紹 uv是一個非常快的 Python 包安裝程序和 pip 解析器,用 Rust 編寫,設計為pip-tools的直接替代品。 以下是官網給出的UV與其他包管理工具解決依賴(左)和安裝包(右)的對比圖。 可以看出UV是一個極快的 P…

麒麟、UOS系統在線打開word文件并提取修訂痕跡

麒麟、UOS系統在線打開word文件并提取修訂痕跡 查看本示例演示效果(Windows版) 查看本示例演示效果(國產版)本示例關鍵代碼的編寫位置,請參考“開始 - 快速上手”里您所使用的開發語言框架的最簡集成代碼 注意 本文中…

【SpringAI+阿里云百煉】AI對話4個Demo

基于SpringAI和阿里云百煉平臺,實現了四個AI對話的小Demo 小團團對話機器人哄哄模擬器培訓班智能客服仿ChatPDF 筆記如下:語雀知識筆記《SpringAI》

【數據結構】單鏈表的增刪查改

本文是小編鞏固自身而作,如有錯誤,歡迎指出! 1.鏈表的概念 概念:鏈表是?種物理存儲結構上?連續、?順序的存儲結構,數據元素的邏輯順序是通過鏈表中的 指針鏈接次序實現的。 和之前的順序表不同,順序一般…

LeetCode 1128.等價多米諾骨牌對的數量:計數

【LetMeFly】1128.等價多米諾骨牌對的數量:計數 力扣題目鏈接:https://leetcode.cn/problems/number-of-equivalent-domino-pairs/ 給你一組多米諾骨牌 dominoes 。 形式上,dominoes[i] [a, b] 與 dominoes[j] [c, d] 等價 當且僅當 (a …

以太坊智能合約開發框架:Hardhat v2 核心功能從入門到基礎教程

一、設置項目 Hardhat 項目是安裝了 hardhat 包并包含 hardhat.config.js 文件的 Node.js 項目。 操作步驟: ①初始化 npm npm init -y②安裝 Hardhat npm install --save-dev hardhat③創建 Hardhat 項目 npx hardhat init如果選擇 Create an empty hardhat.…

安卓基礎(無障礙點擊)

無障礙點擊核心代碼 // 自定義無障礙服務類,繼承自Android系統的AccessibilityService public class MyAccessibilityService extends AccessibilityService {// 當系統產生無障礙事件時的回調方法(如界面變化、焦點切換等)Overridepublic v…

阿里云服務遷移實戰: 05-OSS遷移

概述 Bucket 復制分為兩種,同區域復制和跨區域復制 同賬號復制比較簡單,根據提示填寫信息即可,本文主要介紹跨賬號復制。 同區域復制 授權角色選擇 “AliyunOSSRole”, 創建方法見 “跨區域復制”。然后點擊確定即可。 跨區域復制 假設我…

Qt 的信號與槽機制依賴元對象系統(Meta-Object System)實現

內部數據結構 在 Qt 中,信號和槽之間的連接主要通過 QObject 類及其相關的私有類進行管理。每個 QObject 實例都維護著一個指向其 QMetaObject 的指針,該對象包含了有關類的所有元信息,包括信號、槽等。此外,還有一個關鍵的數據結構用于存儲信號與槽之間的連接信息,即 Co…

前端面試寶典---性能優化

一、加載優化 1. 第三方模塊放在CDN 例如 leaflet通過cdn引入,這樣就不會占用打包體積了 2. prefetch 預加載 例如,之后馬上有個場景需要一個圖片,我們就可以通過link 的 prefetch 對資源進行預先加載 再例如,我們公司是無網絡開…

從零開始:Android Studio開發購物車(第二個實戰項目)

一年經驗的全棧程序員,目前頭發健在,但不知道能撐多久。 文章目錄 前言 一、頁面編寫 1. 頂部標簽欄title_shopping.xml 2. 商品展現列表activity_shopping_channel.xml 3. 商品詳情頁面activity_shopping_detail.xml 4. 購物車頁面activity_shopping…

PostgteSQL for Everybody基礎部分筆記

筆記分享內容參考密歇根大學 Charles Russell Severance 開設的PostgreSQL課程:postgresql-for-everybody,網址為:https://www.coursera.org/specializations/postgresql-for-everybody#courses,在B站等也有相關視頻分享。 我分享…

Python項目源碼63:病歷管理系統1.0(tkinter+sqlite3+matplotlib)

1.病歷管理系統包含以下主要功能: 核心功能:病歷信息錄入(患者姓名、年齡、性別、診斷結果、主治醫生),自動記錄就診時間,病歷信息展示(使用Treeview表格),病歷信息查詢…

MCP底層協議完整通信過程

2025 年是智能體的元年, 也注定是智能體集中爆發的一年! 兩個互聯領域的重大挑戰: 第一、 Agent 與 Tools (工具)的交互 Agent 需要調用外部工具和 API

docker:制作鏡像+上傳鏡像+拉取鏡像

1.dockerfile制作鏡像 示例內容: 1.創建一個index.js的文件 console.log("hello world")2.在相同目錄下創建名為dockerfile的文件 FROM node:alpine COPY index.js /index.js CMD node /index.js3.構建鏡像 docker build -t minterra/hello-docker . …

docker制作python大模型鏡像(miniconda環境),工程改造記錄

**環境說明:**從系統鏡像開始打造python大模型鏡像,之前是人工手動裝的方式,并且模型和依賴在公網中,對于離線交付環境不太友好,所以打造的離線化交付版本 Dockerfile: FROM centos:7.9 ENV PYTHONIOENCODINGutf-8 E…

Rust中避免過度使用鎖導致性能問題的策略

一、引言 在 Rust 多線程編程中,鎖是實現線程同步的重要工具,它可以防止多個線程同時訪問和修改共享數據,從而避免數據競爭和不一致的問題。然而,過度使用鎖會帶來嚴重的性能問題,如鎖競爭導致的線程阻塞、上下文切換…

數據結構每日一題day15(鏈表)★★★★★

題目描述:將一個帶頭結點的單鏈表A分解為兩個帶頭結點的單鏈表A和 B,使得A表中含有原表中序號為奇數的元素,而B表中含有原表中序號為偶數的元素,且保持相對順不變,最后返回 B 表。 算法思想: 1.初始化: 創建新鏈表 B 的頭結點。…