不卡一区二区三区四区_乱中年女人伦av一区二区_美洲天堂一区二卡三卡四卡视频 _国产一区在线精品_91精品国产品国语在线不卡_99在线精品视频_99这里都是精品_国产99久久精品_99re成人在线_亚洲二区在线视频_久久先锋资源网_国产69精品久久久久毛片_亚洲一区二区三区视频在线_91小视频免费观看_欧美制服丝袜第一页_欧美日韩视频在线一区二区

您現在所在的位置:首頁 >學習資源 > Python全棧+人工智能入門教材 > Python基礎入門教程30.4:企業級開發進階 服務端快捷開發

Python基礎入門教程30.4:企業級開發進階 服務端快捷開發

來源:奇酷教育 發表于:

前面的內容中已經介紹了TCP編程和UDP編程實現網絡數據的通信和共享我們可以看到客戶端程序的編寫相對容易,主需要連接服務端然后跟服務端進

前面的內容中已經介紹了TCP編程和UDP編程實現網絡數據的通信和共享

我們可以看到客戶端程序的編寫相對容易,主需要連接服務端然后跟服務端進行數據交互就OK了。但是服務端的程序編寫較為復雜,如果考慮到數據的并發處理等各種問題,就更加復雜難以操作了。

python提供了一個socketserver模塊,可以用于更加快捷的構建我們需要的服務端環境

本節內容

  1. socketserver模塊簡介
  2. 常規模式服務端編程
  3. 并發模式服務端編程

1. socketserver模塊簡介

  • socketserver是什么?
    socketserver模塊時python提供的內置的用于快捷開發服務端程序的一個服務器框架,通過封裝大量實現的方式減少開發人員工作量的同時能快捷開發出具有較高質量的服務端程序。

  • socketserver中提供了什么?
    socketserver模塊主要包含的服務器類:TCPserver、UCPserver、ThreadingTCPserver、ThreadingUDPserver、ForkingTCPserver、ForkingUDPserver
    注意:上述TCP表示TCP服務端編程需要的服務類,UDP表示UDP編程需要的服務類,包含Threading的表示多線程并發需要的服務類;包含Forking的表示多進程并發需要的服務類
    關于多線程和多進程,后面的章節中會詳細介紹

  • socketserver核心操作?
    socketserver框架中,服務端的處理類主要有StreamRequestHandler(基于TCP協議的)、DatagramRequestHandler(基于UDP協議的),處理類中非常重要的一個方法headler()用來執行服務端程序中的核心操作

    class mytcpserver(socketserver.StreamRequestHandler):
      def handle(self):
          # 服務器中的核心操作代碼
  • socketserver中的結構?
    socketserver中主要包含兩部分:服務器和處理類
    服務類就是socketserver提供了內置服務類,如TCPserver、UDPserver等等
    處理類就是我們自定義的處理類,處理類中會包含handle()方法用于業務處理

2. 服務端編程

2.1. TCP服務端編程

使用socketserver編寫服務端程序如下:

import socketserver


# 自定義處理類
class myTcp(socketserver.StreamRequestHandler):
    # 定義處理方法
    def handle(self):
        # 通過client_address屬性查看連接進來的服務器
        print("連接上的服務器:%s" % str(self.client_address))
        while True:
            # 接收客戶端發送的數據
            msg = self.request.recv(1024)
            if not msg:
                break;
            print("客戶端發過來消息:%s" % msg.decode("UTF-8"))
            # 給客戶端返回接收信息
            self.request.sendall("已經成功接收您發送的消息".encode("UTF-8"))


# 程序從主線程直接運行
if __name__ == "__main__":
    # 創建服務端對象,指定處理類,并監聽8888端口
    server = socketserver.TCPServer(('', 8888), myTcp)
    # 啟動服務端程序
    server.serve_forever()

此時,我們使用常規模式開發客戶端程序如下:

import socket

sc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sc.connect(("192.168.10.108", 8888))

while True:
    msg = input("請輸入要發送的內容:")
    if not msg or msg == "exit":
        break
    sc.sendall(msg.encode("UTF-8"))
    msg = sc.recv(1024)
    print("服務器回應:" + msg.decode("UTF-8"))

sc.close()

運行上述程序,就可以和之前一樣,實現客戶端和服務端之間的數據通信了;
和以前不一樣的時,此時我們如果關閉了客戶端,服務端程序還是在運行的,如果重新啟動客戶端,客戶端又會接入服務端,重新建立連接并通信。

2.2. UDP服務端編程

使用socketserver的UDPServer服務類和DatagramRequestHandler處理類進行服務端的編程處理如下:

import socketserver

# 創建自定義處理類
class myUdp(socketserver.DatagramRequestHandler):
    # 創建自定義處理方法
    def handle(self):
        # 打印連接進來的客戶端信息
        print("連接到服務器的主機:" + str(self.client_address))

        # 收發消息
        while True:
            # 接收客戶端發送的消息
            # msg = self.request.recv()
            msg = self.rfile.readline()
            if not msg:
                break
            print("接受到客戶端發送的消息:%s" % msg.decode("UTF-8"))
            # 發送消息
            self.wfile.write("接收到您發送的消息".encode("UTF-8"))
# 主模塊線程中運行程序
if __name__ == "__main__":
    # 創建UDP服務器對象
    server = socketserver.UDPServer(("", 8989), myUdp)
    # 啟動UDP服務器
    server.serve_forever()

使用常規的方式開發UDP客戶端代碼如下:

import socket

sc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    data = input("請輸入要發送的消息:")
    if not data or data == "exit":
        break

    sc.sendto(data.encode("UTF-8"), ("192.168.10.108", 8989))

    data,recv = sc.recvfrom(1024)
    if not data:
        break
    print("服務器返回消息:" + data.decode("UTF-8"))

sc.close()

此時啟動服務端程序,啟動客戶端程序,就可以實現服務端和客戶端時間的數據通信了。
另外:你可以試試啟動多個客戶端程序看看,有彩蛋哦。

3. 服務端并發

關于使用多線程或者多進程并發的方式也是比較簡單的,參考代碼如下,如果有興趣的話,等學習完并發編程之后,可以再回過頭看看ThreadingTCPServer和ForkingTCPServer這樣多線程和多進程并發的操作哦
服務端參考代碼:

import socketserver

class myTcp(socketserver.StreamRequestHandler):
    def handle(self):
        while True:
            data = self.request.recv(1024)
            print("接收到數據:" + data.decode("UTF-8"))
            self.request.sendall("數據已經接收成功".encode("UTF-8"))

if __name__ == "__main__":
    server = socketserver.ThreadingTCPServer(("", 9000), myTcp)
    server.serve_forever()

客戶端還是常規的客戶端

import socket

sc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sc.connect(("192.168.10.108", 9000))

while True:
    msg = input("請輸入要發送的內容:")
    if not msg or msg == "exit":
        break
    sc.sendall(msg.encode("UTF-8"))
    msg = sc.recv(1024)
    print("服務器回應:" + msg.decode("UTF-8"))

sc.close()

>>>更多VR/AR入門教程:VR入門
 
不卡一区二区三区四区_乱中年女人伦av一区二区_美洲天堂一区二卡三卡四卡视频 _国产一区在线精品_91精品国产品国语在线不卡_99在线精品视频_99这里都是精品_国产99久久精品_99re成人在线_亚洲二区在线视频_久久先锋资源网_国产69精品久久久久毛片_亚洲一区二区三区视频在线_91小视频免费观看_欧美制服丝袜第一页_欧美日韩视频在线一区二区
久久大片网站| 国产亚洲一本大道中文在线| 99精品视频在线免费观看| 蜜臂av日日欢夜夜爽一区| 夜夜嗨av一区二区三区中文字幕| 国产精品免费久久久久| 国产精品午夜在线观看| 国产精品视频线看| 欧美精品一区二区三区视频| 精品欧美一区二区三区精品久久| 欧美成人一区二区三区在线观看 | 亚洲女人毛片| 中文一区一区三区免费| 日本丶国产丶欧美色综合| 无遮挡亚洲一区| 亚洲国产成人不卡| 色吊一区二区三区| 欧美日韩在线播| 制服丝袜成人动漫| 26uuu国产电影一区二区| 久久久国际精品| 亚洲欧洲综合另类在线| 午夜精品一区二区三区电影天堂| 日本不卡视频在线| 不卡免费追剧大全电视剧网站| www.久久久| 亚洲精品一区二区三区四区五区 | 国产色爱av资源综合区| 日韩久久一区二区| 免费看精品久久片| 成人激情电影免费在线观看| 国产精品免费看一区二区三区| 欧美高清性xxxxhd| 欧美天堂一区二区三区| 久久综合九色欧美综合狠狠 | 久久草av在线| 99r精品视频| 欧美日韩免费观看一区| 欧美性xxxxxxxx| 国产午夜精品一区二区三区嫩草| 亚洲综合久久久久| 国产精一区二区三区| 国产精品日本一区二区| 中文字幕色一区二区| 欧美一区二区三区不卡| 亚洲伦理在线精品| 国产精品资源在线观看| 91传媒视频免费| av免费观看久久| 亚洲人成精品久久久久久| 亚洲h动漫在线| 国产成人免费9x9x人网站视频| 91蜜桃网址入口| 日韩aⅴ视频一区二区三区| 欧美性欧美巨大黑白大战| 日韩欧美在线网站| 久久综合九色综合欧美98| 亚洲第一电影网| 国产精品99久久久久| 国产精品v欧美精品v日韩精品| 欧美动漫一区二区| 精品视频一区二区三区免费| 欧美不卡一区二区三区| 亚洲三级久久久| 风间由美中文字幕在线看视频国产欧美 | 波多野结衣中文一区| 国产成人亚洲欧美| 色综合色狠狠综合色| 欧美videos大乳护士334| 综合精品久久久| 麻豆精品视频在线观看免费| 91亚洲大成网污www| 亚洲高清视频一区二区| 欧美一级艳片视频免费观看| 亚洲国产视频在线| 成人一道本在线| 日韩欧美三级一区二区| 精品少妇一区二区三区| 亚洲国产精品一区二区尤物区| 国产美女精品在线| 明星裸体视频一区二区| 欧美一区二区三区人| 亚洲欧美一区二区三区久本道91 | 国产乱人伦精品一区二区在线观看| voyeur盗摄精品| 欧美视频观看一区| 国产精品嫩草99a| 极品美女销魂一区二区三区 | 精品免费日产一区一区三区免费| 色女孩综合影院| 日本一区二区综合亚洲| 精品在线观看视频| 日韩免费电影一区二区| 国产欧美日韩在线| 国产不卡视频在线观看| 一本色道亚洲精品aⅴ| 亚洲欧美激情一区二区| 国产精品白丝av| 欧美日韩精品福利| 午夜亚洲福利老司机| 国产综合动作在线观看| 精品精品欲导航| 精品一区精品二区高清| 四虎永久在线精品免费一区二区| 国产亚洲精品7777| 成人一区二区三区| 欧美日韩一区精品| 午夜精品一区在线观看| 国模一区二区三区私拍视频| 久久久久久久久蜜桃| 国产精品一区二区久久不卡| 色呦呦一区二区三区| 一区二区在线观看免费| 好吊色欧美一区二区三区 | 欧美精品aⅴ在线视频| 亚洲国产色一区| 久久爱av电影| 中文字幕中文字幕中文字幕亚洲无线| 日韩理论电影院| 999国内精品视频在线| 欧美日韩国产片| 麻豆精品久久精品色综合| 色狠狠av一区二区三区| 日韩国产欧美在线观看| 水蜜桃亚洲精品| 亚洲黄色av一区| 久久av一区二区| 亚洲欧美色图小说| 免费亚洲精品视频| 一区二区三区视频在线观看| 久久精品99久久| 久久蜜桃av一区二区天堂| 国产日韩一区欧美| 亚洲日本丝袜连裤袜办公室| 国产在线精品日韩| 成人欧美一区二区三区白人| 精品乱码一区| 夜夜精品浪潮av一区二区三区| 久热这里只精品99re8久| 中文字幕久久午夜不卡| 国产一区二区三区黄| 国产精品欧美久久久久一区二区 | 亚洲va天堂va国产va久| 日韩欧美视频一区二区| 午夜精品久久久久久久久久久| 午夜精品区一区二区三 | 欧美一级免费观看| 伊人久久大香线蕉av一区| 中文字幕佐山爱一区二区免费| 国产精品麻豆免费版| 亚洲婷婷在线视频| 视频一区二区综合| 青青草伊人久久| 欧美福利视频一区| 91传媒视频在线观看| 亚洲乱码国产乱码精品精的特点| 91蝌蚪porny| 欧美一区二区三区喷汁尤物| 精品久久一区二区三区蜜桃| 亚洲第一在线综合网站| 欧美日韩中文精品| 93久久精品日日躁夜夜躁欧美| 国产精品久久免费看| 秋霞久久久久久一区二区| 视频一区视频二区中文| 欧美一区二区三区人| 99综合电影在线视频| 日韩国产成人精品| 91精品国产综合久久福利| 91免费观看| 婷婷激情综合网| 精品免费视频一区二区| 久久99国产精品| 老汉av免费一区二区三区| 欧美日韩国产色站一区二区三区| 精品日韩欧美| 激情av综合网| 欧美韩日一区二区三区| 亚洲精品久久区二区三区蜜桃臀| 国产毛片一区二区| 国产精品人成在线观看免费| 色综合咪咪久久| av在线免费不卡| ...av二区三区久久精品| 日韩亚洲国产中文字幕欧美| 久久人人爽爽人人爽人人片av| 日韩av网站免费在线| 国产日本一区二区| 91黄色激情网站| 国产区欧美区日韩区| 捆绑变态av一区二区三区| 日韩视频在线你懂得| 在线视频你懂得一区| 国产精品国产三级欧美二区 | 日韩国产高清影视| 国产偷国产偷亚洲高清人白洁| 在线电影看在线一区二区三区| 成人一区二区三区| 青娱乐精品在线视频| 国产欧美日韩另类视频免费观看|