97**国产露脸精品国产,国内精品免费一区二区三区,国产精品久久久久久久久妇女,国内一区二区三区精品视频

您現在所在的位置:首頁 >學習資源 > 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入門
 
97**国产露脸精品国产,国内精品免费一区二区三区,国产精品久久久久久久久妇女,国内一区二区三区精品视频
少妇无套高潮一二三区| 懂色av蜜桃av| 丰满饥渴老女人hd| 国产无遮挡在线观看| 黄瓜视频污在线观看| 国产老熟女伦老熟妇露脸| 亚洲天堂av网站| 催眠调教后宫乱淫校园| a天堂视频在线观看| 国产艳俗歌舞表演hd| 色噜噜在线观看| 久久精品成人av| 青青操在线播放| av女名字大全列表| 波多野结衣有码| 日本少妇高潮喷水xxxxxxx| 国产黄色大片免费看| 北条麻妃在线观看视频| 2018国产精品| 我不卡一区二区| 91精产国品一二三| 国产精久久一区二区三区| 91麻豆免费视频网站| 99久久人妻精品免费二区| 一区二区黄色片| 精品自拍偷拍视频| 国产精品无码永久免费不卡| 亚洲一区电影在线观看| 朝桐光av一区二区三区| 五月天婷婷丁香网| 在线免费观看污视频| 18啪啪污污免费网站| 性久久久久久久久久| 国产大片免费看| 人妻少妇无码精品视频区| 黄色片子免费看| 手机免费观看av| 久久无码人妻精品一区二区三区| www.99re7| 五月激情四射婷婷| 中文字幕被公侵犯的漂亮人妻| 黑人巨大猛交丰满少妇| 殴美一级黄色片| 中国美女乱淫免费看视频| 日批视频免费看| 午夜国产福利一区二区| 日本黄区免费视频观看| 一区二区三区四区免费| 在线天堂www在线国语对白| 欧美精品久久久久久久久46p| 91网站免费视频| 一本色道久久综合亚洲精品图片| 蜜桃视频无码区在线观看| 中文字幕另类日韩欧美亚洲嫩草| 国内精品卡一卡二卡三| b站大片免费直播| 蜜桃传媒一区二区亚洲av| 香港三日本8a三级少妇三级99| 成年人看片网站| 亚洲国产精品狼友在线观看| 丰满熟女人妻一区二区三区| 天天躁日日躁狠狠躁av| 在线免费观看a级片| 久久国产精品影院| 美女av免费看| 免费三级在线观看| 99久久综合网| 国产艳俗歌舞表演hd| 亚洲天堂久久新| 亚洲综合图片一区| 精产国品一区二区三区| 美女扒开腿免费视频| 美国黄色a级片| www.黄色com| 2025中文字幕| 黑人巨大精品欧美| 亚洲熟女毛茸茸| 95视频在线观看| 日本污视频网站| avtt中文字幕| 国产一二三四区在线| 成人羞羞国产免费图片| 蜜臀av一区二区三区有限公司| av在线播放中文字幕| 亚洲免费观看在线| 亚洲午夜精品久久久久久高潮| 小早川怜子一区二区的演员表| 超碰在线国产97| 欧洲美一区二区三区亚洲| 日韩成人毛片视频| 免费看91的网站| 黄色激情在线观看| 蜜臀av午夜精品久久| 国产特级黄色录像| 好吊操视频这里只有精品| 少妇av片在线观看| 成人午夜精品无码区| 免费高清在线观看电视| 亚洲精品国产91| 欧美肉大捧一进一出免费视频| 久艹在线观看视频| 18精品爽国产三级网站| 中文字幕在线播放一区| av地址在线观看| 人人澡人人澡人人看| 蜜桃无码一区二区三区| 亚洲精品乱码久久久久久不卡| 在线观看网站黄| 99久久99久久精品国产| 日韩黄色中文字幕| 五月天综合视频| 在线小视频你懂的| 国产精品扒开腿做爽爽| 免费中文字幕av| 亚洲最大免费视频| 熟女少妇一区二区三区| 插吧插吧综合网| 短视频在线观看| aaaaa级少妇高潮大片免费看| 一女三黑人理论片在线| 国产精品一区二区入口九绯色| 亚洲午夜久久久久久久久| 日本在线不卡一区二区| 亚洲の无码国产の无码步美| v天堂中文在线| 成人免费网站黄| 一级特黄曰皮片视频| 欧美日韩国产一二三区| 免费成人深夜夜行网站| 久久久久亚洲av无码专区体验| 激情小说欧美色图| 人妻丰满熟妇aⅴ无码| 少妇人妻好深好紧精品无码| 一级黄色毛毛片| 亚洲av无码一区二区三区在线| 中国特级黄色片| 五月婷婷综合在线观看| 男女男精品视频网站| 国产精品19p| 国产精品无码专区| 亚洲激情图片网| 国产男女无遮挡猛进猛出| 国产xxxx视频| 午夜黄色福利视频| 在线中文字日产幕| 日韩一卡二卡在线观看| www国产视频| 91制片厂在线| 亚洲欧美色图视频| 国产老头和老头xxxx×| 中文成人无字幕乱码精品区| 非洲一级黄色片| 久久久无码人妻精品无码| 99精品欧美一区二区| 亚洲黄色小说在线观看| 亚洲最大成人综合网| www男人天堂| 亚洲综合网在线| 舐め犯し波多野结衣在线观看| 国产va在线播放| 精品一区二区6| 野花社区视频在线观看| 人妻精油按摩bd高清中文字幕| 国产又粗又黄又猛| 亚洲欧美色图视频| 黄色免费看视频| av在线免费观看不卡| 欧美xxxx精品| 亚洲成人日韩在线| 成熟妇人a片免费看网站| 国产免费嫩草影院| 成人黄色免费网址| 免费黄色在线视频| 欧美熟妇精品黑人巨大一二三区| aaaaa黄色片| 亚洲午夜精品在线观看| 加勒比婷婷色综合久久| 永久免费未视频| 无码人妻一区二区三区免费n鬼沢| 男女全黄做爰文章| 国产一区在线观看免费| 国产成人精品视频免费| 刘亦菲国产毛片bd| 69xxx免费| 欧美自拍偷拍网| 日韩在线一卡二卡| 国产少妇在线观看| 337p日本欧洲亚洲大胆张筱雨| 亚洲妇女无套内射精| 成年人小视频在线观看| 亚洲一级av无码毛片精品| 给我看免费高清在线观看| 91中文字幕永久在线| 91网站免费入口| 内射毛片内射国产夫妻| jizz18女人高潮| 18岁成人毛片| 免费的av网站| 久久午夜精品视频| 国产又粗又猛又爽又黄|