亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python asyncore socket客戶端實現方法詳解

 更新時間:2022年12月22日 08:31:55   作者:JSON_L  
這篇文章主要介紹了Python asyncore socket客戶端實現方法,asyncore庫是python的一個標準庫,提供了以異步的方式寫入套接字服務的客戶端和服務器的基礎結構

介紹

asyncore庫是python的一個標準庫,提供了以異步的方式寫入套接字服務的客戶端和服務器的基礎結構。操作網絡的時候可以直接使用socket等底層的庫,但是asyncore使得我們可以更加方便的操作網絡,避免直接使用socket,select,poll等工具時需要面對的復雜情況。

1.定義類并且繼承 asyncore.dispatcher

class SocketClient(asyncore.dispatcher):

2.實現類中的回調代碼

調用父類方法

asyncore.dispatcher.__init__(self)

創(chuàng)建socket對象

self.create_socket()

連接服務器

address = (host, port)
self.connect(address)

實現 handle_connect 回調函數

當socket 連接服務器成功時回調該函數

def handle_connect(self):
    print('連接成功')

實現 writable 回調函數

描述是否有數據需要被發(fā)送到服務器。返回值為True表示可寫,False 表示不可寫。

如果不識閑默認返回為 True,當返回True時,回調函數handle_write將被觸發(fā)

def writable(self):
    return False

實現 handle_write 回調函數

當有數據需要發(fā)送時 (writable 回調函數返回 True時),

該函數被觸發(fā),通常情況下在該函數中編寫send方法發(fā)送數據

def handle_write(self):
    # 內部實現對服務器發(fā)送數據
    # 調用 send 方法,參數是字節(jié)數據
    self.send('hello world'.encode('utf-8'))

實現 readable 回調函數

描述是否有數據從服務端讀取。返回True標識有數據需要讀取,

False表示沒有數據需要被讀取,當不實現默認返回True,

當返回True時,handle_read將被觸發(fā)

def readable(self):
    # 表示有數據需要讀取
    return True

實現 handle_read回調函數

當有數據需要讀取時(readable 回調函數返回True時),

該函數被觸發(fā),通常情況下在該函數中編寫recv方法接收數據

def handle_read(self):
    # 主動讀取接收數據 參數是需要接收數據長度
    result = self.recv(8000)
    print(result)

實現 handle_error回調函數

當程序運行過程發(fā)生異常時回調

def handle_error(self):
    # 編寫處理錯誤方法
    t, e, trace = sys.exc_info()
    print(t, e, trace)

實現 handle_close回調函數

當連接被關閉時觸發(fā)

def handle_close(self):
    print('連接關閉')
    # 執(zhí)行關閉
    self.close()

3.創(chuàng)建對象并且執(zhí)行asyncore.loop進入運行循環(huán)

timeout為一次循環(huán)所用的時間,也就是超時時間。

client = SocketClient('127.0.0.1', 9000)
# 開始啟動運行循環(huán)
asyncore.loop(timeout=10)

服務端示例代碼

import asyncore
import socket
class EchoHandler(asyncore.dispatcher_with_send):
    def handle_read(self):
        data = self.recv(8192)
        if data:
            self.send(data)
class EchoServer(asyncore.dispatcher):
    def __init__(self, host, port):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.bind((host, port))
        # 監(jiān)聽連接參數指定排隊的最大連接數和應至少為1; 最大值取決于系統(tǒng)(通常為5)。
        self.listen(5)
    '''
    當與發(fā)起對本地端點的 connect() 調用的新遠程端點已建立連接時會在偵聽通道(被動打開方)上被調用。 
    sock 是可被用于在連接上發(fā)送和接收數據的 新建 套接字對象,
    而 addr 是綁定到連接另一端的套接字的地址。
    '''
    def handle_accept(self):
        pair = self.accept()
        if pair is not None:
            sock, addr = pair
            print('連接來自于 %s' % repr(addr))
            # 連接成功后 給客戶端發(fā)送消息
            handler = EchoHandler(sock)
            handler.send('hello world'.encode('utf-8'))
if __name__ == '__main__':
    server = EchoServer('127.0.0.1', 9000)
    asyncore.loop()

運行結果

服務端:

客戶端:

注意

本文章使用python3.7版本,3.10版本已經移除此模塊,之后可使用asyncio模塊。

至此結束,本文章只做了一個基本使用講解,可以查看借鑒使用,若想要做消息還差的很多。

到此這篇關于Python asyncore socket客戶端實現方法詳解的文章就介紹到這了,更多相關Python asyncore socket內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python3爬蟲中異步協程的用法

    python3爬蟲中異步協程的用法

    在本篇文章里小編給大家整理的是關于python3爬蟲中異步協程的用法,需要的朋友們可以學習參考下。
    2020-07-07
  • python中的對象拷貝示例 python引用傳遞

    python中的對象拷貝示例 python引用傳遞

    你想復制一個對象?因為在Python中,無論你把對象做為參數傳遞,做為函數返回值,都是引用傳遞的
    2014-01-01
  • 詳解Python3中的多重繼承和混入類

    詳解Python3中的多重繼承和混入類

    Python原生支持多重繼承,這使得我們可以從多個父類中繼承屬性和方法,在本文中,我們將介紹Python中多重繼承的概念,并討論在實際情況下可能遇到的坑,我們還將討論如何使用混入類來避免這些問題,需要的朋友可以參考下
    2023-05-05
  • python使用pymongo操作mongo的完整步驟

    python使用pymongo操作mongo的完整步驟

    這篇文章主要給大家介紹了關于python使用pymongo操作mongo的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 使用Python寫CUDA程序的方法

    使用Python寫CUDA程序的方法

    下面小編就為大家?guī)硪黄褂肞ython寫CUDA程序的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Python CSV 文件解析和生成方法示例

    Python CSV 文件解析和生成方法示例

    這篇文章主要為大家介紹了Python CSV 文件的解析和生成方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 介紹Python的Django框架中的靜態(tài)資源管理器django-pipeline

    介紹Python的Django框架中的靜態(tài)資源管理器django-pipeline

    這篇文章主要介紹了介紹Python的Django框架中的靜態(tài)資源管理器django-pipeline,django-pipeline是一個開源項目,被用來處理css等靜態(tài)文件,需要的朋友可以參考下
    2015-04-04
  • python 以16進制打印輸出的方法

    python 以16進制打印輸出的方法

    今天小編就為大家分享一篇python 以16進制打印輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Pandas 實現分組計數且不計重復

    Pandas 實現分組計數且不計重復

    這篇文章主要介紹了Pandas 實現分組計數且不計重復的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 解決python 3 urllib 沒有 urlencode 屬性的問題

    解決python 3 urllib 沒有 urlencode 屬性的問題

    今天小編就為大家分享一篇解決python 3 urllib 沒有 urlencode 屬性的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論