Python入門基礎之socket多線程編程,TCP伺服器和客戶端通信

2020-12-06 碼不完的代碼

在上一篇文章中,我介紹了一下python3 socket編程的基礎,包括TCP、UDP客戶端和伺服器的建立過程(連結在最下方)。不過那個只是單線程的,伺服器一次只能和一個客戶端會話,多個客戶端的話只能等待。我們平時的應用中,伺服器肯定是要並發的,所以,今天將介紹socket編程的多線程編程。一個伺服器同時和多個客戶端建立會話。

多線程原理:TCP伺服器會創建一個線程池,每當有客戶端請求連接的時候,它便會從線程池中分配一個線程同客戶端建立連接,當客戶端中斷連接後,線程便銷毀。

SocketServer 模塊

在python中,socket多線程並發的實現主要是利用SocketServer模塊實現的。客戶端比較簡單,一般只用socket就可以,伺服器端複雜些,用socketserver或者Twisted 框架等,本篇主要講SocketServer。 SocketServer 是標準庫中一個高級別的模塊。用於簡化網絡客戶與伺服器的實現。

socketserver模塊中分兩大類:server類(解決連接問題)和request類(解決通信問題)

server類:

Request類:

類的描述如下:

SocketServerTCP伺服器:

這裡我們用到了類,因為多線程就可以利用面向對象了,每一次連接,不過是實現了一個實例。類我前面也講過了有興趣可以看一下。

在代碼中,先導入我們的伺服器類,然後像之前一樣定義主機常量。主機常量後就是我們的請求處理器類,然後是啟動代碼。

伺服器和客戶端建立連接的步驟我就不寫了,上一篇文章中有。

不廢話了,上代碼:

伺服器端:

代碼解釋:

我們從 SocketServer 的 StreamRequestHandler 類中派生出一個子類,並重寫 handle()函數。

在有客戶消息進來的時候,handle()函數就會被調用。StreamRequestHandler 類支持像操作文件對象那樣操作輸入輸出套接字。用request.recv()函數接收消息。因為socketserver是封裝好的模塊,我們不需要對其初始化連接。其中self.request self.client_address等於socket中 conn,addr = socket.accept(),只不過在socketserver模塊中已經替我們包裝好了,還替我們包裝了包括bind()、listen()、accept()方法(不懂得看我前面文章,連接在下面)。

代碼中間部分就是接收客戶端消息,並返回給客戶端。

代碼的最後部分用給定的主機信息和請求處理類創建 TCP 伺服器。然後進入等待客戶請求與處理客戶請求的無限循環中。

客戶端:

客戶端非常簡單,就是簡單socket編程。代碼和上一篇中的都一樣,就是多了一個異常處理。步驟就是昨天我發的文章裡面的

上一篇文章:Python入門基礎之網絡編程、socket編程、TCP、UDP編程

面向對象:乾貨!Python入門基礎之面向對象二:類和實例、方法

碼字不易,多多關注。

相關焦點

  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    6背景圖像 7敵人飛機 8英雄飛機 9發射子彈以及碰撞檢測 4部分視頻課程 1網絡編程 2多任務 3web伺服器v3.1 4python高級語法v3.1 5mysql資料庫v3.1 6mini-web框架v3.1 7html和css
  • 開發三年轉測試,除了Python基礎外,還需哪些必備測試技能?
    三、開發基礎面試題自動化常用的語言是java和python,參考面試題:(1)JAVA知識Q1:List、Set、Map 之間的區別List 是一個有序並且允許元素重複的集合Q3:Hashtable 與 HashMap 有什麼不同之處?Hashtable 是過時了的遺留下來的類,後面新增的是HashMap。Hashtable 的方法是同步的,所以時間上比較慢,但HashMap 沒有同步策略,雖然時間更快了但是也導致它另外一個問題:HashMap是線程不安全的。
  • python基礎知識科普:python的起源和發展史以及應用場景
    python基礎關鍵常識:Python的發音與拼寫Python的意思是蟒蛇,源於作者喜歡的一部電視劇 (C呢?)託社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容還是只能看英語 版。構架選擇太多(沒有像C#這樣的官方.net構架,也沒有像ruby由於歷史較短,構架開發的相對集中。Ruby on Rails 構架開發中小型web程序天下 無敵)。
  • 計算機網絡安全之python入門基礎
    python介紹 (A)python安裝 (B)專注網絡安全A:Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言是一門非常常用的程式語言,除了廣泛應用在科學計算、大數據處理等領域外,在計算機安全領域中也使用廣泛。
  • 網際網路編程如何入門,學習路徑又是什麼?
    今天給大家來講一講網際網路學習編程以及如何入門等相關知識。1.先學會C++和socket或者windows的http server api做一個http server,做一個小網站。2.多加幾個網頁後,你就會比較的明白為什麼的大家總是需要一個template語言工具了,然後可以自己去試一試,做出一個。
  • Linux多線程編程和Linux 2.6下的NPTL
    這幾天由於工作需要,琢磨了一下Linux下的多線程的相關資料。Linux下最常用的多線程支持庫為 Pthread庫,它是glibc庫的組成部分。但是關於Pthread的說明文檔非常缺乏,特別是對POSIX多線程規範的介紹以及pthread庫中多線程實現方式的介紹實在是少之又少。而多線程編程對於系統程式設計師而言是必須掌握的技術,因此總是讓學習中的程式設計師覺得頭痛不以。
  • Python為什麼這麼火?小孩子適合學習python編程嗎?
    「人生苦短,我選Python」——魯迅程式語言由於學習門檻比較高,一直以來似乎只有程式設計師之間會互相討論,普通人也很難對冰冷的語法和算法什麼的感興趣。但自從Python出現後,程式語言和我們日常生活中的鴻溝被悄悄打破了,越來越多的人開始使用它,甚至開始愛上它。
  • Python開發簡單爬蟲【學習資料總結】
    語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例) (1)Python3入門,數據類型,字符串 (2)判斷/循環語句,函數, (3)類與對象,繼承,多態 (4)tkinter界面編程
  • Python入門小迷宮,走完這個迷宮,就能掌握python編程基礎
    這是一個很神奇的迷宮,走完這個迷宮就能掌握python基礎。其實,這是一個用python做的迷宮小遊戲,非常簡單,但對於python初學者來說,還是有一定的挑戰性,但TONOW有源碼和教程,只要跟著python迷宮小遊戲的教程和相應的源碼,不僅很容易就能自己開發出這個遊戲,還能在這個過程中,掌握python編程的基礎哦!
  • 廣州Python測試培訓
    基礎編程語法;2、使用模塊進行程序設計3、使用Python創建文件、訪問、刪除文件。立即諮詢 02 Python高級編程 教學目標:1、掌握python高級編程,能進行面向對象設計;2、掌握網絡編程協議,實現網絡間點對點通信;3、掌握關係型資料庫MySql開發,熟練編寫SQL語句;
  • gRPC Python 入門到生產環境
    基於HTTP/2協議提供了更好的強的應用性能(節省帶寬,減少TCP請求連接數)基於ProtoBuf定義服務,面向接口對服務進行頂層設計支持主流的程式語言,C++,Java,Python,Go,Ruby,Node.js,PHP等, 基於ProtoBuf生成相應的服務端和客戶端代碼。
  • 清華大牛4小時就把IO模型/TCP/IP通信原理講明白了?
    分布式架構微服務IO模型必須先搞懂TCP/IP通信原理tcpip在開發中的作用什麼是socket什麼是三次握手四次揮手如何應對百萬連接,如何製造百萬連接>數據包如何發送出去什麼是路由表什麼IP位址什麼是掩碼什麼是網關,什麼是下一跳什麼是鏈路層,什麼是原子通信什麼是連接池,並發和連接的關係什麼時候能復用什麼時候不能復用連接
  • 嵌入式WEB伺服器中TCP/IP協議棧的設計與實現
    由於Web技術的開放性和獨立平臺特性,大大降低了軟體系統和通信系統的設計、維護工作量,節省了人員培訓費用,提高了現場測試和控制設備的管理水平。而嵌入式Web伺服器將Web伺服器引入到現場測試和控制設備中,在相應的硬體平臺和軟體系統的支持下,使傳統的測試和控制設備轉變為具備了以TCP/IP為底層通信協議,Web技術為核心的基於網際網路的網絡測試和控制設備,有著一般Web伺服器所不具有優勢。
  • 電腦入門程式語言
    今天和大家介紹一下電腦入門編程學什麼語言更合適。首選python語言,python 是一門開源免費、通用型的腳本程式語言,現在社會上會python語言的人很吃香的。它上手簡單,功能強大,堅持「極簡主義」。
  • Python,爬蟲開發的不二選擇
    開發爬蟲使用的語言,一般有C++、Java或者Python等,這些都是面向對象的程式語言。其中C++和Java都是強類型語言,而Python是一種弱類型語言。那麼這三類語言都是有什麼優缺點呢?請看下面描述:1)JAVAJava的語法比較規則,採用嚴格的面向對象編程方法,同時有很多大型的開發框架,比較適合企業級應用。
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    今天,小編將與您分享一個爬蟲的基本知識和入門教程:什麼是爬蟲?網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。想要入門Python 爬蟲首先需要解決四個問題:1.熟悉python編程2.了解HTML3.了解網絡爬蟲的基本原理4.學習使用python爬蟲庫1、