Python全棧之路系列之socketserver實(shí)現(xiàn)多并發(fā)

利用socketserver實(shí)現(xiàn)多并發(fā),socketserver內(nèi)部會(huì)調(diào)用socket模塊進(jìn)行功能上的實(shí)現(xiàn)

client.py客戶端腳本文件內(nèi)容

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import socket

# 創(chuàng)建一個(gè)socket對(duì)象
obj = socket.socket()

# 制定服務(wù)端的IP地址和端口
obj.connect(('127.0.0.1', 999, ))

# 阻塞,等待服務(wù)端發(fā)送內(nèi)容,接受服務(wù)端發(fā)送過來的內(nèi)容,最大接受1024字節(jié)
ret_bytes = obj.recv(1024)

# 因?yàn)榉?wù)端發(fā)送過來的是字節(jié),所以我們需要把字節(jié)轉(zhuǎn)換為字符串進(jìn)行輸出
ret_str = str(ret_bytes, encoding="utf-8")

# 輸出內(nèi)容
print(ret_str)

while True:
    # 當(dāng)進(jìn)入連接的時(shí)候,提示讓用戶輸入內(nèi)容
    inp = input("Client請(qǐng)輸入要發(fā)送的內(nèi)容>>> ")
    # 如果輸出q則退出
    if inp == "q":
        # 把q發(fā)送給服務(wù)端
        obj.sendall(bytes(inp, encoding="utf-8"))
        # 退出當(dāng)前while
        break
    else:
        # 否則就把用戶輸入的內(nèi)容發(fā)送給用戶
        obj.sendall(bytes(inp, encoding="utf-8"))
        # 等待服務(wù)端回答
        print("正在等待Server輸入內(nèi)容......")
        # 獲取服務(wù)端發(fā)送過來的結(jié)果
        ret = str(obj.recv(1024), encoding="utf-8")
        # 輸出結(jié)果
        print(ret)

# 連接完成之后關(guān)閉鏈接
obj.close()

server.py服務(wù)端腳本文件內(nèi)容

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import socketserver

class MyServer(socketserver.BaseRequestHandler):

    def handle(self):

        conn = self.request

        conn.sendall(bytes("你好,歡迎登陸!", encoding="utf-8"))

        while True:
            # 輸出等待客戶端發(fā)送內(nèi)容
            print("正在等待Client輸入內(nèi)容......")
            # 接收客戶端發(fā)送過來的內(nèi)容
            ret_bytes = conn.recv(1024)
            # 轉(zhuǎn)換成字符串類型
            ret_str = str(ret_bytes, encoding="utf-8")
            # 輸出用戶發(fā)送過來的內(nèi)容
            print(ret_str)

            # 如果用戶輸入的是q
            if ret_str == "q":
                # 則退出循環(huán),等待下個(gè)用戶輸入
                break
            # 給客戶端發(fā)送內(nèi)容
            inp = input("Service請(qǐng)輸入要發(fā)送的內(nèi)容>>> ")
            conn.sendall(bytes(inp, encoding="utf-8"))

if __name__ == "__main__":
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 999, ), MyServer)
    server.serve_forever()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容