程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 用Python實現一個簡單的多線程TCP服務器的教程

用Python實現一個簡單的多線程TCP服務器的教程

編輯:更多關於編程

       這篇文章主要介紹了用Python實現一個簡單的多線程TCP服務器的教程,示例的運行環境為Windows操作系統,需要的朋友可以參考下

      最近看《python核心編程》,書中實現了一個簡單的1對1的TCPserver,但是在實際使用中1對1的形勢明顯是不行的,所以研究了一下如何在server端通過啟動不同的線程(進程)來實現每個鏈接一個線程。

      其實python在類的設計上已經考慮到了這一方面的需求,我們只要在自己的server上繼承一下SocketServer.BaseRequestHandler就可以了。

      server端代碼如下:

      ?

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env python import SocketServer from time import ctime HOST = '' PORT = 21567 ADDR = (HOST, PORT) class MyRequestHandler(SocketServer.BaseRequestHandler): def handle(self): print '...connected from:', self.client_address while True: self.request.sendall('[%s] %s' % (ctime(),self.request.recv(1024))) tcpServ = SocketServer.ThreadingTCPServer(ADDR, MyRequestHandler) print 'waiting for connection...' tcpServ.serve_forever()

      客戶端代碼如下(基本和書中一模一樣,只是把循環中的關閉鏈接注釋掉了):

      ?

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/env python from socket import * HOST = 'localhost' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) while True: tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR) data = raw_input('> ') if not data: break tcpCliSock.send('%srn' % data) data = tcpCliSock.recv(BUFSIZ) if not data: break print data.strip() #tcpCliSock.close()

      從客戶端的代碼可以看出,每次輸入都會建立一次新的請求。

      測試一下,啟動server和client之後,在client中輸入測試:

    201555114612673.png (434×234)
    201555114637991.png (438×202)
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved