精品久久久久久久久久久院品网_男女男精品视频_日韩**一区毛片_在线免费不卡电影_亚洲少妇屁股交4_久久国内精品视频_日韩一区二区三免费高清_亚洲成人手机在线_91看片淫黄大片一级在线观看_中文字幕亚洲在_日本一区二区在线不卡_欧美酷刑日本凌虐凌虐_理论电影国产精品_国产精品视频yy9299一区_99久久精品免费观看_国产精品久久三

您現在所在的位置:首頁 >學習資源 > 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入門
 
精品久久久久久久久久久院品网_男女男精品视频_日韩**一区毛片_在线免费不卡电影_亚洲少妇屁股交4_久久国内精品视频_日韩一区二区三免费高清_亚洲成人手机在线_91看片淫黄大片一级在线观看_中文字幕亚洲在_日本一区二区在线不卡_欧美酷刑日本凌虐凌虐_理论电影国产精品_国产精品视频yy9299一区_99久久精品免费观看_国产精品久久三
99精彩视频在线观看免费| 成人免费观看av| 亚洲欧美成人一区二区三区| 国产精品久久久久久亚洲毛片| 国产婷婷色一区二区三区| 久久久五月婷婷| 国产精品伦理在线| 亚洲综合色在线| 日韩激情中文字幕| 奇米精品一区二区三区在线观看 | 91丨porny丨户外露出| 91久久偷偷做嫩草影院| 国模一区二区三区私拍视频| 性欧美精品一区二区三区在线播放 | 成人av免费在线观看| 91麻豆高清视频| 欧美不卡三区| 在线观看av一区二区| 日韩一区二区在线观看| 亚洲国产高清在线| 午夜激情一区二区三区| 国产成人av一区二区三区在线 | 玉米视频成人免费看| 日本欧美加勒比视频| 欧美一区国产二区| 中文字幕欧美日韩一区| 肉色丝袜一区二区| 99riav久久精品riav| 三区精品视频观看| 日韩欧美精品三级| 一区二区三区日韩欧美精品| 国产一区二区91| 精品人伦一区二区三区| 欧美日韩亚洲综合一区二区三区| 国产日韩av一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人av网站在线观看免费| 欧洲精品国产| 日韩精品一区二区三区在线播放 | 亚洲乱码一区二区三区| 日韩欧美中文字幕制服| 亚洲精品国产成人久久av盗摄| 国产揄拍国内精品对白| 久久99精品久久久久久水蜜桃| 日本韩国欧美在线| 国产精品女同互慰在线看| 久久国产精品99精品国产| 国产一区自拍视频| 欧美一区二区视频在线观看 | 久久久久久久久伊人| 日韩中文字幕一区二区三区| 91精品国自产在线观看| 欧美日韩视频一区二区| 亚洲蜜桃精久久久久久久| 岛国av在线一区| 中文字幕剧情在线观看一区| 国产精品午夜免费| 国产999精品久久| 中国人体摄影一区二区三区| 国产拍揄自揄精品视频麻豆| 国产精品中文字幕日韩精品| 一区二区三区四区国产| 中文文精品字幕一区二区| 精品在线视频一区| 亚洲乱码一区二区三区三上悠亚| 久久精品亚洲一区二区三区浴池 | 亚洲人妖av一区二区| 国产99久久久国产精品| 色综合av在线| 亚洲伦理在线精品| 91视频在线观看| 91精品国产高清一区二区三区| 五月天久久比比资源色| 久久av一区二区三区亚洲| 亚洲精品一区二区三区精华液 | 欧美日韩在线一二三| 精品久久久久久最新网址| 免费成人在线影院| 欧美在线视频二区| 中文天堂在线一区| 5g国产欧美日韩视频| 欧美一区二区视频观看视频| 天堂午夜影视日韩欧美一区二区| 国产亚洲情侣一区二区无| 久久久久九九视频| 国产自产v一区二区三区c| 一级特黄录像免费播放全99| 一区二区三区成人在线视频| 久久久久久99| 综合久久久久久久| 久久久久久久久久久久久久久久av| 久久久久久久久免费| 成人爽a毛片一区二区免费| 日韩一区二区在线看| 国产成人精品免费视频网站| 欧美精品高清视频| 国产精品一区二区视频| 91精品国产手机| 国产九色sp调教91| 欧美一二三四在线| 不卡一区二区在线| 精品国精品国产| 91免费版黄色| 中文字幕在线免费不卡| 国产偷久久久精品专区| 国产精品白丝在线| 日本不卡在线播放| 偷窥国产亚洲免费视频| 欧美天堂亚洲电影院在线播放| 韩国精品主播一区二区在线观看| 欧美日韩在线播放一区| 国产精品一区免费视频| 精品国产精品一区二区夜夜嗨| 成人福利在线看| 欧美国产欧美综合| 欧美日韩亚洲一区二区三区在线观看| 亚洲一区日韩精品中文字幕| 一区二区三区四区五区精品| 精品一区二区在线观看| 日韩视频免费直播| 91丨porny丨蝌蚪视频| 成人免费在线观看入口| 婷婷亚洲婷婷综合色香五月| 免费成人在线观看| 日韩一区二区在线观看| 国产精品久久久久久久久久久久冷| 亚洲免费电影在线| 一本一本大道香蕉久在线精品| 久久成人av少妇免费| 久久久久久免费| 日韩偷拍一区二区| 国产自产2019最新不卡| 国产视频在线观看一区二区三区| 欧美污视频久久久| 国产乱人伦偷精品视频不卡 | 欧美视频一区二区| 成人av免费在线播放| 亚洲天堂福利av| 欧美在线综合视频| 91精品国产91久久久久青草| 亚洲欧美日韩一区二区| 欧美亚洲综合一区| 国产精品日韩一区二区三区| 日韩精品三区四区| 精品成人佐山爱一区二区| 日本公妇乱淫免费视频一区三区| 国产综合色视频| 亚洲欧美日韩在线播放| 欧美老肥妇做.爰bbww| 精品久久久久久乱码天堂| 欧美a一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲韩国在线| 91在线看国产| 日韩成人一区二区三区在线观看| 久久尤物电影视频在线观看| 在线国产99| 国产欧美日韩一区| 韩国一区二区视频| 亚洲女子a中天字幕| 欧美成人精品福利| 一区二区免费在线观看| 99精彩视频| 国产一区二区电影| 亚洲在线视频免费观看| 久久久噜噜噜久久人人看| 中文字幕欧美日韩一区二区| 国产91亚洲精品一区二区三区| 久久国产麻豆精品| 尤物视频一区二区| 久久久久国产精品麻豆ai换脸 | 91豆麻精品91久久久久久| 97伦理在线四区| 激情欧美一区二区三区在线观看| 亚洲裸体xxx| 欧美va日韩va| 欧美日韩一区成人| 日韩免费电影一区二区| 99久久久精品免费观看国产| 国产一区二区三区综合 | 国产麻豆日韩| 不卡的av在线播放| 蜜桃一区二区三区在线观看| 一区二区三区成人| 国产精品久久夜| 精品久久久久久亚洲综合网| 欧美肥妇bbw| 欧美日韩一区精品| 一区二区三区偷拍| 神马影院我不卡| 久久国产主播精品| 国产不卡一区二区在线观看| 成人伦理片在线| 国产成人亚洲综合a∨婷婷图片 | 久久99精品久久久久久秒播放器| 成a人片亚洲日本久久| 国内外成人在线视频| 日韩成人免费在线| 视频一区二区三区入口| 亚洲图片一区二区|