用Python實現(xiàn)一個簡單的多線程TCP服務(wù)器的教程
最近看《python核心編程》,書中實現(xiàn)了一個簡單的1對1的TCPserver,但是在實際使用中1對1的形勢明顯是不行的,所以研究了一下如何在server端通過啟動不同的線程(進程)來實現(xiàn)每個鏈接一個線程。
其實python在類的設(shè)計上已經(jīng)考慮到了這一方面的需求,我們只要在自己的server上繼承一下SocketServer.BaseRequestHandler就可以了。
server端代碼如下:
#!/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()
客戶端代碼如下(基本和書中一模一樣,只是把循環(huán)中的關(guān)閉鏈接注釋掉了):
#!/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('%s\r\n' % data) data = tcpCliSock.recv(BUFSIZ) if not data: break print data.strip() #tcpCliSock.close()
從客戶端的代碼可以看出,每次輸入都會建立一次新的請求。
測試一下,啟動server和client之后,在client中輸入測試:
- python網(wǎng)絡(luò)編程之TCP通信實例和socketserver框架使用例子
- Python采用socket模擬TCP通訊的實現(xiàn)方法
- Python Socket實現(xiàn)簡單TCP Server/client功能示例
- python實現(xiàn)簡單的TCP代理服務(wù)器
- python實現(xiàn)TCP服務(wù)器端與客戶端的方法詳解
- Python中的TCP socket寫法示例
- Python實現(xiàn)TCP/IP協(xié)議下的端口轉(zhuǎn)發(fā)及重定向示例
- Python+Socket實現(xiàn)基于TCP協(xié)議的客戶與服務(wù)端中文自動回復(fù)聊天功能示例
- Python socket網(wǎng)絡(luò)編程TCP/IP服務(wù)器與客戶端通信
- python3.5實現(xiàn)socket通訊示例(TCP)
- python中的TCP(傳輸控制協(xié)議)用法實例分析
相關(guān)文章
Python中使用glob和rmtree刪除目錄子目錄及所有文件的例子
這篇文章主要介紹了python中使用glob和rmtree刪除目錄子目錄及所有文件的例子,需要的朋友可以參考下2014-11-11Pandas創(chuàng)建DataFrame提示:type?object?'object'?has?n
Pandas數(shù)據(jù)幀(DataFrame)是二維數(shù)據(jù)結(jié)構(gòu),它包含一組有序的列,每列可以是不同的數(shù)據(jù)類型,這篇文章主要給大家介紹了關(guān)于Pandas創(chuàng)建DataFrame提示:type?object?‘object‘?has?no?attribute?‘dtype‘的解決方案,需要的朋友可以參考下2023-02-02