中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中操作socketserver的方法

發布時間:2020-08-13 13:45:22 來源:億速云 閱讀:159 作者:小新 欄目:編程語言

python中操作socketserver的方法?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

python3操作socketserver

socketserver是標準庫中的一個高級模塊,用于網絡客戶端與服務器的實現.模塊中,已經實現了一些可供使用的類。

在python3中,導入socketserver模塊使用的命令:

import socketserver

socketserver模塊包括許多可以簡化TCP,UDP,UNIX域套接字服務器實現的類。

1.處理程序

使用socketserver模塊 ,必須先定義一個繼承自BaseRequestHandle的處理程序類。

BaseRequestHandle類的實例化可以實現以下方法:

sock.handle()調用該方法執行實際的請求操作.調用函數可以不帶任何參數,但是幾個實例變量包含有用的值。

sock.request包含請求。

sock.client_address包含客戶端的地址。

sock.server包含調用處理程序的實例。

對于TCP之類的數據流服務,sock.request屬性是套接字對象。

對于數據報服務,還是包含收到數據的字節字符串。

2.sock.setup()該方法在handle()之前調用.默認情況下,不執行任何操作.如果希望服務器實現更多連接設置(如建立SSL連接),則無需調用該方法。

3.sock.finish()調用本方法可以在執行完handle()之后執行清除操作.默認情況下,不執行任何操作.如果setup()和handle()方法都不生成異常,則無需調用該方法。

如果知道應用程序只能操縱面向數據流的連接(如TCP),那么應從StreamRequestHandle繼承,而不是BaseRequestHandler.StreaRequestHandler類設置了兩個屬性,sock.wfile是將數據寫入客戶端的類文件對象,sock.rfile是從客戶端讀取數據的類文件對象。

如果編寫針對數據包操作的處理程序并將響應持續返回給發送方,那么它應當從DategramRequestHandler繼承.它提供的類接口與StreamREquestHandler相同。

2.服務器

要使用處理程序,必須將其插入到服務器對象,定義了四個基本的服務類。

(1).TCPServer(address,handler)         支持使用IPV4的TCP協議的服務器,address是一個(host,port)元組.
                                           Handler是BaseRequestHandler或StreamRequestHandler類的子類的實例.
(2).UDPServer(address,handler)         支持使用IPV4的UDP協議的服務器,address和handler與TCPServer類似.
(3).UnixStreamServer(address,handler)    使用UNIX域套接字實現面向數據流協議的服務器,繼承自TCPServer.
(4).UnixDatagramServer(address,handler)    使用UNIX域套接字實現數據報協議的服務器,繼承自UDPServer.

所有四個服務類的實例都有以下方法和變量:

1.sock.socket             用于傳入請求的套接字對象
2.sock.server_address        監聽服務器的地址.比如元組("127.0.0.1",80)
3.sock.RequestHandlerClass      傳遞給服務器構造函數并由用戶提供的請求處理程序類.
4.sock.serve_forever()        處理無限的請求.
5.sock.shutdown()           停止serve_forever()循環.
6.sock.fileno()            返回服務器套接字的整數文件描述符.該方法可以有效的通過輪詢操作(如select()函數)
                                 使用服務器實例。

3.定義自定義服務器

服務器往往需要特殊的配置來處理不同的網絡地址簇.超時期,并發和其他功能,可以通過繼承上面四個基本服務器類來自行定義。

可以通過混合類獲得更多服務器功能,這也是通過進程或線程分支添加并發的方法.為了實現并發性,定義了以下類:

1.ForkingMinIn          將UNIX進程分支添加到服務器的混合方法,使用該方法可以讓服務器服務多個客戶.
2.ThreadingMinIn        修改服務器的混合類,可以使用多線程服務多個客戶端.

要向服務器添加這些功能,可以使用多重繼承,其中首先列出了混合類.

由于并發服務器很常用,為了定義它,SockServer預定義了以下服務器類:

1.ForkingUDPServer(address,handler)
2.ForkingTCPServer(address,handler)
3.TthreadingUDPServer(address,handler)
4.ThreadingTCPServer(address,handler)

SockerServer模塊中的類主要有以下幾個:

 1.BaseServer                        包含服務器的核心功能與混合類(min-in)的鉤子功能.這個類主用于派生,
                                      不要直接生成這個類的類對象,可以考慮使用TCPServer和UDPServer類.
 2.TCPServer                  基本的網絡同步TCP服務器
 3.UDPServer                  基本的網絡同步UDP服務器
 4.ForkingMinIn                實現了核心的進程化功能,用于與服務器類進行混合(min-in),以提供一些異步特性.
                                       不要直接生成這個類的對象
 5.ThreadingMinIn               實現了核心的線程化功能,用于與服務器類進行混合(min-in),以提供一些異步特性,
                                        不要直接生成這個類的對象
 6.ForkingTCPServer             ForkingMinIn與TCPServer的組合
 7.ForkingUDPServer             ForkingMinIn與UDPServer的組合
 8.BaseRequestHandler       
 9.StreamRequestHandler           TCP請求處理類的一個實現
 10.DataStreamRequestHandler         UDP請求處理類的一個實現

使用socketserver模塊編寫的TCP服務器端代碼:

# !/usr/bin/env python
# _*_coding:utf-8_*_
import socketserver
class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        print("from conn:",self.request)
s1=socketserver.ThreadingTCPServer(("127.0.0.1",9999),MyServer)
s1.serve_forever()

感謝各位的閱讀!看完上述內容,你們對python中操作socketserver的方法大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寿阳县| 册亨县| 潍坊市| 平邑县| 青冈县| 廊坊市| 绥化市| 永兴县| 黄梅县| 县级市| 杨浦区| 乐平市| 康定县| SHOW| 昭通市| 珠海市| 田林县| 静乐县| 徐汇区| 盘锦市| 阜康市| 那坡县| 和硕县| 临沧市| 同德县| 修武县| 吉木乃县| 常熟市| 文山县| 吴旗县| 阳曲县| 定安县| 江达县| 吉隆县| 昌吉市| 芜湖市| 呼玛县| 临安市| 高尔夫| 阿拉善左旗| 赤峰市|