最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python基于socketserver實(shí)現(xiàn)并發(fā),驗(yàn)證客戶端的合法性

 更新時(shí)間:2021年05月17日 14:45:29   作者:小楊-先生  
TCP協(xié)議的socket一次只能和一個(gè)客戶端通信, 而socketsever可以時(shí)間和多個(gè)客戶端通信。本文將講解socketserver的具體使用

一、socketserver實(shí)現(xiàn)并發(fā)

tcp協(xié)議的socket是只能和一個(gè)客戶端通信的,使用socketserver可以實(shí)現(xiàn)和多個(gè)客戶端通信,他是在socket的基礎(chǔ)上進(jìn)行的封裝,底層還是調(diào)用的socket。

socket是底層模塊

socketserver是基于socket完成的

socketserver代碼格式:

服務(wù)端:

import socketserver     # 引入模塊
import time
​
​
# 類名隨便定義,但是必須繼承socketserver.BaseRequestHandler此類。
class Myserver(socketserver.BaseRequestHandler):
​
    def handle(self):           # handle方法,固定名字
        conn = self.request     # conn相當(dāng)于每個(gè)客戶端連接過來(lái)的,客戶端信息
        '''
        以下就是基于conn客戶端信息,對(duì)每個(gè)客戶端鏈接到服務(wù)端必須做的操作
        conn——>等于客戶端的連接信息
        以此實(shí)現(xiàn)并發(fā)連接
        '''
        while True:
            try:
                content = conn.recv(1024).decode('utf-8')
                conn.send(content.upper().encode('utf-8'))
                time.sleep(1)
            except ConnectionResetError:
                break
​
​
# 對(duì) socketserver.ThreadingTCPServer 類實(shí)例化對(duì)象,將IP地址,端口號(hào),以及自己定義的類名傳入,并返回一個(gè)對(duì)象
server = socketserver.ThreadingTCPServer(('127.0.0.1', 4444), Myserver)
server.serve_forever()      # 執(zhí)行對(duì)象server_forever方法,開啟服務(wù)端

客戶端:

import socket
​
sk = socket.socket()
sk.connect(('127.0.0.1', 4444))
​
while True:
    sk.send(b'heelo')
    content = sk.recv(1024).decode('utf-8')
    print(content)

二、驗(yàn)證客戶端合法性

在分布式系統(tǒng)中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的客戶端鏈接認(rèn)證功能,又不像SSL那么復(fù)雜,那么利用hmac+加鹽的方法實(shí)現(xiàn)。

思路:

服務(wù)端發(fā)送隨機(jī)字符串(并用客戶端和服務(wù)端都知道的秘鑰對(duì)隨機(jī)字符串進(jìn)行加密)——>客戶端接收到服務(wù)端發(fā)送的隨機(jī)字符串(并用相同的秘鑰進(jìn)行加密發(fā)送回服務(wù)端)——>服務(wù)端接收到客戶端發(fā)送的加密字符串和自己加密的字符串做對(duì)比(如果一致,就是合法客戶端,不一致,就立即關(guān)閉)

使用hashlib方法:

服務(wù)端

import socket
import hashlib
import os
​
# 設(shè)置雙方都擁有的秘鑰
secret = '秘鑰'.encode('utf-8')
​
sk = socket.socket()
sk.bind(('127.0.0.1', 4444))
​
sk.listen()
conn, _ = sk.accept()
​
# 給服務(wù)端發(fā)送32位隨機(jī)字節(jié)串
count = os.urandom(32)
conn.send(count)
​
# 并對(duì)字節(jié)串進(jìn)行加鹽加密
hs = hashlib.sha1(secret)
hs.update(count)
info_server = hs.hexdigest()
​
# 接收客戶端發(fā)送的對(duì)字節(jié)串加密后的信息
info_client = conn.recv(1024).decode('utf-8')
​
# 客戶端加密后的信息和服務(wù)端加密后的信息做對(duì)比
if info_server == info_client:
    # 相等則連接合法,繼續(xù)操作
    print('合法連接')
else:
    # 不相等則斷開鏈接
    print('非合法用戶')
    conn.close()

客戶端

import socket
import hashlib
​
# 雙方共有的秘鑰
secret = '秘鑰'.encode('utf-8')
​
sk = socket.socket()
sk.connect(('127.0.0.1', 4444))
​
# 接收服務(wù)端發(fā)送的隨機(jī)字節(jié)
count = sk.recv(1024)
​
# 對(duì)隨機(jī)字節(jié)進(jìn)行加密
hs = hashlib.sha1(secret)
hs.update(count)
info = hs.hexdigest().encode('utf-8')
​
# 把加密后的字節(jié)發(fā)送回服務(wù)端做判斷
sk.send(info)

以上就是python基于socketserver實(shí)現(xiàn)并發(fā),驗(yàn)證客戶端的合法性的詳細(xì)內(nèi)容,更多關(guān)于python socketserver實(shí)現(xiàn)并發(fā)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python的ORM框架中SQLAlchemy庫(kù)的查詢操作的教程

    Python的ORM框架中SQLAlchemy庫(kù)的查詢操作的教程

    這篇文章主要介紹了Python的ORM框架中SQLAlchemy庫(kù)的查詢操作的教程,SQLAlchemy用來(lái)操作數(shù)據(jù)庫(kù)十分方便,需要的朋友可以參考下
    2015-04-04
  • python基于queue和threading實(shí)現(xiàn)多線程下載實(shí)例

    python基于queue和threading實(shí)現(xiàn)多線程下載實(shí)例

    這篇文章主要介紹了python基于queue和threading實(shí)現(xiàn)多線程下載實(shí)例,是比較實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • 基于Python實(shí)現(xiàn)對(duì)比Exce的工具

    基于Python實(shí)現(xiàn)對(duì)比Exce的工具

    這篇文章主要介紹了基于Python實(shí)現(xiàn)對(duì)比Excel的小工具,通過循環(huán)對(duì)比組合列(主鍵+對(duì)比列)結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2022-04-04
  • Python標(biāo)準(zhǔn)庫(kù)calendar的使用方法

    Python標(biāo)準(zhǔn)庫(kù)calendar的使用方法

    本文主要介紹了Python標(biāo)準(zhǔn)庫(kù)calendar的使用方法,calendar模塊主要由Calendar類與一些模塊方法構(gòu)成,Calendar類又衍生了一些子孫類來(lái)幫助我們實(shí)現(xiàn)一些特殊的功能,感興趣的可以了解一下
    2021-11-11
  • python中time.ctime()實(shí)例用法

    python中time.ctime()實(shí)例用法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python中time.ctime()實(shí)例用法內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2021-02-02
  • python dlib人臉識(shí)別代碼實(shí)例

    python dlib人臉識(shí)別代碼實(shí)例

    這篇文章主要介紹了python dlib人臉識(shí)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python可視化hdf5文件的操作

    python可視化hdf5文件的操作

    這篇文章主要介紹了python可視化hdf5文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-05-05
  • Python基于Logistic回歸建模計(jì)算某銀行在降低貸款拖欠率的數(shù)據(jù)示例

    Python基于Logistic回歸建模計(jì)算某銀行在降低貸款拖欠率的數(shù)據(jù)示例

    這篇文章主要介紹了Python基于Logistic回歸建模計(jì)算某銀行在降低貸款拖欠率的數(shù)據(jù),結(jié)合實(shí)例形式分析了Python基于邏輯回歸模型的數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Python集中化管理平臺(tái)Ansible介紹與YAML簡(jiǎn)介

    Python集中化管理平臺(tái)Ansible介紹與YAML簡(jiǎn)介

    這篇文章主要介紹了Python集中化管理平臺(tái)Ansible介紹與YAML,簡(jiǎn)單說明了集中化管理平臺(tái)Ansible的功能與YAML語(yǔ)言的基本語(yǔ)法與基本使用技巧,需要的朋友可以參考下
    2019-06-06
  • PyQt5每天必學(xué)之拖放事件

    PyQt5每天必學(xué)之拖放事件

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之拖放事件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評(píng)論

专栏| 福泉市| 延安市| 白城市| 黄冈市| 青河县| 神农架林区| 保靖县| 当雄县| 张掖市| 正宁县| 吉林市| 旺苍县| 科尔| 平利县| 广河县| 凤翔县| 明溪县| 雷州市| 延长县| 钦州市| 新龙县| 博白县| 永顺县| 寿宁县| 壶关县| 奈曼旗| 泰宁县| 临洮县| 万年县| 海兴县| 名山县| 通化市| 松潘县| 辽源市| 小金县| 乌拉特中旗| 中阳县| 万全县| 贵溪市| 阜城县|