国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python---案例-多任務(wù)版TCP服務(wù)端程序開(kāi)發(fā)

這篇具有很好參考價(jià)值的文章主要介紹了Python---案例-多任務(wù)版TCP服務(wù)端程序開(kāi)發(fā)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 需求

目前我們開(kāi)發(fā)的TCP服務(wù)端程序只能服務(wù)于一個(gè)客戶端,如何開(kāi)發(fā)一個(gè)多任務(wù)版的TCP服務(wù)端程序能夠服務(wù)于多個(gè)客戶端呢?

完成多任務(wù),可以使用線程,比進(jìn)程更加節(jié)省內(nèi)存資源。

2. 具體實(shí)現(xiàn)步驟

  1. 編寫(xiě)一個(gè)TCP服務(wù)端程序,循環(huán)等待接受客戶端的連接請(qǐng)求
  2. 當(dāng)客戶端和服務(wù)端建立連接成功,創(chuàng)建子線程,使用子線程專(zhuān)門(mén)處理客戶端的請(qǐng)求,防止主線程阻塞
  3. 把創(chuàng)建的子線程設(shè)置成為守護(hù)主線程,防止主線程無(wú)法退出。

3. 多任務(wù)版TCP服務(wù)端程序的示例代碼:

import socket
import threading


# 處理客戶端的請(qǐng)求操作
def handle_client_request(service_client_socket, ip_port):
    # 循環(huán)接收客戶端發(fā)送的數(shù)據(jù)
    while True:
        # 接收客戶端發(fā)送的數(shù)據(jù)
        recv_data = service_client_socket.recv(1024)
        # 容器類(lèi)型判斷是否有數(shù)據(jù)可以直接使用if語(yǔ)句進(jìn)行判斷,如果容器類(lèi)型里面有數(shù)據(jù)表示條件成立,否則條件失敗
        # 容器類(lèi)型: 列表、字典、元組、字符串、set、range、二進(jìn)制數(shù)據(jù)
        if recv_data:
            print(recv_data.decode("gbk"), ip_port)
            # 回復(fù)
            service_client_socket.send("ok,問(wèn)題正在處理中...".encode("gbk"))

        else:
            print("客戶端下線了:", ip_port)
            break
    # 終止和客戶端進(jìn)行通信
    service_client_socket.close()


if __name__ == '__main__':
    # 創(chuàng)建tcp服務(wù)端套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 設(shè)置端口號(hào)復(fù)用,讓程序退出端口號(hào)立即釋放
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 綁定端口號(hào)
    tcp_server_socket.bind(("", 9090))
    # 設(shè)置監(jiān)聽(tīng), listen后的套接字是被動(dòng)套接字,只負(fù)責(zé)接收客戶端的連接請(qǐng)求
    tcp_server_socket.listen(128)
    # 循環(huán)等待接收客戶端的連接請(qǐng)求
    while True:
        # 等待接收客戶端的連接請(qǐng)求
        service_client_socket, ip_port = tcp_server_socket.accept()
        print("客戶端連接成功:", ip_port)
        # 當(dāng)客戶端和服務(wù)端建立連接成功以后,需要?jiǎng)?chuàng)建一個(gè)子線程,不同子線程負(fù)責(zé)接收不同客戶端的消息
        sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
        # 設(shè)置守護(hù)主線程
        sub_thread.setDaemon(True)
        # 啟動(dòng)子線程
        sub_thread.start()


    # tcp服務(wù)端套接字可以不需要關(guān)閉,因?yàn)榉?wù)端程序需要一直運(yùn)行
    # tcp_server_socket.close()

執(zhí)行結(jié)果:

客戶端連接成功: ('172.16.47.209', 51528)
客戶端連接成功: ('172.16.47.209', 51714)
hello1 ('172.16.47.209', 51528)
hello2 ('172.16.47.209', 51714)

4. 小結(jié)

  1. 編寫(xiě)一個(gè)TCP服務(wù)端程序,循環(huán)等待接受客戶端的連接請(qǐng)求

     while True:
         service_client_socket, ip_port = tcp_server_socket.accept()
    
  2. 當(dāng)客戶端和服務(wù)端建立連接成功,創(chuàng)建子線程,使用子線程專(zhuān)門(mén)處理客戶端的請(qǐng)求,防止主線程阻塞

     while True:
         service_client_socket, ip_port = tcp_server_socket.accept() 
         sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
         sub_thread.start()
    
  3. 把創(chuàng)建的子線程設(shè)置成為守護(hù)主線程,防止主線程無(wú)法退出。

     while True:
         service_client_socket, ip_port = tcp_server_socket.accept() 
         sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
         sub_thread.setDaemon(True) 
         sub_thread.start()

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-762874.html

到了這里,關(guān)于Python---案例-多任務(wù)版TCP服務(wù)端程序開(kāi)發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 計(jì)算機(jī)網(wǎng)絡(luò) TCP/UDP程序開(kāi)發(fā)網(wǎng)絡(luò)聊天室

    計(jì)算機(jī)網(wǎng)絡(luò) TCP/UDP程序開(kāi)發(fā)網(wǎng)絡(luò)聊天室

    TCP/UDP程序開(kāi)發(fā) 開(kāi)發(fā)TCP/UDP協(xié)議應(yīng)用程序,掌握網(wǎng)絡(luò)應(yīng)用程序的工作原理。通過(guò)該實(shí)驗(yàn),深入理解UDP和TCP協(xié)議的異同點(diǎn),了解網(wǎng)絡(luò)協(xié)議的工作過(guò)程,學(xué)會(huì)網(wǎng)絡(luò)通信編程的基本方法,能夠編制網(wǎng)絡(luò)應(yīng)用程序。 (1)了解和掌握“基于UDP-面向無(wú)連接的應(yīng)用程序/基于TCP-面向連接的

    2024年02月05日
    瀏覽(22)
  • 井字棋--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第7章-課后作業(yè))

    井字棋--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第7章-課后作業(yè))

    井字棋是一種在3 * 3格子上進(jìn)行的連珠游戲,又稱(chēng)井字游戲。井字棋的游戲有兩名玩家,其中一個(gè)玩家畫(huà)圈,另一個(gè)玩家畫(huà)叉,輪流在3 * 3格子上畫(huà)上自己的符號(hào),最先在橫向、縱向、或斜線方向連成一條線的人為勝利方。如圖1所示為畫(huà)圈的一方為勝利者。 ? 圖1 井字棋 本實(shí)

    2024年02月04日
    瀏覽(188)
  • 刮刮樂(lè)--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第4章-課后作業(yè))

    刮刮樂(lè)的玩法多種多樣,彩民只要刮去刮刮樂(lè)上的銀色油墨即可查看是否中獎(jiǎng)。每張刮刮樂(lè)都有多個(gè)兌獎(jiǎng)區(qū),每個(gè)兌獎(jiǎng)區(qū)對(duì)應(yīng)著不同的獲獎(jiǎng)信息,包括“一等獎(jiǎng)”、“二等獎(jiǎng)”、“三等獎(jiǎng)”和“謝謝惠顧”。假設(shè)現(xiàn)在有一張刮刮樂(lè),該卡片上面共有8個(gè)刮獎(jiǎng)區(qū),每個(gè)刮獎(jiǎng)區(qū)對(duì)應(yīng)

    2024年02月06日
    瀏覽(472)
  • 逢七拍手游戲--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第3章-課后作業(yè))

    逢7拍手游戲的規(guī)則是:從1開(kāi)始順序數(shù)數(shù),數(shù)到有7或者包含7的倍數(shù)的時(shí)候拍手。本實(shí)例要求編寫(xiě)程序,模擬實(shí)現(xiàn)逢七拍手游戲,輸出100以?xún)?nèi)需要拍手的數(shù)字。 掌握f(shuō)or循環(huán)與range()函數(shù)的使用 掌握字符串中find()方法的使用 判斷一個(gè)數(shù)字是否與7相關(guān),可分為兩種情況: 1.是否為

    2024年02月06日
    瀏覽(138)
  • 手機(jī)通訊錄--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第5章-課后作業(yè))

    手機(jī)通訊錄--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第5章-課后作業(yè))

    通訊錄是記錄了聯(lián)系人姓名和聯(lián)系方式的名錄,手機(jī)通訊錄是最常見(jiàn)的通訊錄之一,人們可以在通訊錄中通過(guò)姓名查看相關(guān)聯(lián)系人的聯(lián)系方式、郵箱、地址等信息,也可以在其中新增聯(lián)系人,或修改、刪除聯(lián)系人信息。下面是一個(gè)常見(jiàn)通訊錄的功能菜單,如圖1所示。 ? 圖1

    2024年02月01日
    瀏覽(89)
  • 銀行管理系統(tǒng)--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第7章-課后作業(yè))

    銀行管理系統(tǒng)--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第7章-課后作業(yè))

    從早期的錢(qián)莊到現(xiàn)如今的銀行,金融行業(yè)在不斷地變革;隨著科技的發(fā)展、計(jì)算機(jī)的普及,計(jì)算機(jī)技術(shù)在金融行業(yè)得到了廣泛的應(yīng)用。銀行管理系統(tǒng)是一個(gè)集開(kāi)戶、查詢(xún)、取款、存款、轉(zhuǎn)賬、鎖定、解鎖、退出等一系列的功能的管理系統(tǒng),該系統(tǒng)中各功能的介紹如下。 開(kāi)戶功

    2024年02月04日
    瀏覽(95)
  • 中文數(shù)字對(duì)照表--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第4章-課后作業(yè))

    中文數(shù)字對(duì)照表--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第4章-課后作業(yè))

    阿拉伯?dāng)?shù)字因其具有簡(jiǎn)單易寫(xiě)、方便使用的特點(diǎn)成為了最流行的數(shù)字書(shū)寫(xiě)方式,但在使用阿拉伯?dāng)?shù)字計(jì)數(shù)時(shí),可以對(duì)某些數(shù)字不漏痕跡的修改成其它數(shù)字,例如,將數(shù)字“1”修改為數(shù)字“7”,將數(shù)字“3”修改為數(shù)字“8”。為了避免引起不必要的麻煩,可以使用中文大寫(xiě)數(shù)字

    2024年02月05日
    瀏覽(91)
  • 圖書(shū)管理系統(tǒng)登錄頁(yè)面--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第12章-課后作業(yè))

    圖書(shū)管理系統(tǒng)登錄頁(yè)面--課后程序(Python程序開(kāi)發(fā)案例教程-黑馬程序員編著-第12章-課后作業(yè))

    登錄與注冊(cè)是程序中最基本的模塊。用戶只有登錄成功后,才可以使用應(yīng)用系統(tǒng)中的全部功能。若用戶沒(méi)有登錄賬號(hào),可通過(guò)注冊(cè)界面設(shè)置登錄賬號(hào)信息。某圖書(shū)管理系統(tǒng)的登錄窗口如圖1所示。 ? 登錄界面 圖1的窗口中包含用戶名、密碼、驗(yàn)證碼、登錄、注冊(cè)、退出。當(dāng)用戶

    2024年02月03日
    瀏覽(86)
  • 三菱FX5U modbus tcp協(xié)議 plc做服務(wù)器和客戶端案例程序

    三菱FX5U modbus tcp協(xié)議 plc做服務(wù)器和客戶端案例程序

    三菱FX5U ?modbus tcp協(xié)議 ?plc做服務(wù)器和客戶端案例程序,提供調(diào)試工具,程序注解,通訊協(xié)議功能的配置。 標(biāo)題:三菱FX5U PLC在Modbus TCP協(xié)議中充當(dāng)服務(wù)器和客戶端的案例程序及通信配置詳解 摘要:本文主要介紹了如何在三菱FX5U PLC上實(shí)現(xiàn)Modbus TCP協(xié)議的服務(wù)器和客戶端功能,并

    2024年04月17日
    瀏覽(107)
  • Python-Python高階技巧:HTTP協(xié)議、靜態(tài)Web服務(wù)器程序開(kāi)發(fā)、循環(huán)接收客戶端的連接請(qǐng)求

    Python-Python高階技巧:HTTP協(xié)議、靜態(tài)Web服務(wù)器程序開(kāi)發(fā)、循環(huán)接收客戶端的連接請(qǐng)求

    當(dāng)前版本號(hào)[20231114]。 版本 修改說(shuō)明 20231114 初版 1.1 網(wǎng)址的概念 網(wǎng)址又稱(chēng)為URL,URL的英文全拼是(Uniform Resoure Locator),表達(dá)的意思是 統(tǒng)一資源定位符 ,通俗理解就是網(wǎng)絡(luò)資源地址。 URL地址:https://www.itcast.com/18/1122/10/E178J2O4000189FH.html 1.2 URL的組成 域名 : IP地址的別名 ,它是用

    2024年02月04日
    瀏覽(39)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包