這篇文章主要介紹了用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中輸入測試: