用Python实现一个简单的多线程TCP服务器的教程


Posted in Python onMay 05, 2015

 最近看《python核心编程》,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程。

其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的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()

客户端代码如下(基本和书中一模一样,只是把循环中的关闭链接注释掉了):

#!/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实现一个简单的多线程TCP服务器的教程

用Python实现一个简单的多线程TCP服务器的教程

Python 相关文章推荐
Python简单生成8位随机密码的方法
May 24 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
python对于requests的封装方法详解
Jan 03 Python
python numpy 按行归一化的实例
Jan 21 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python selenium爬取微博数据代码实例
May 22 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
python spilt()分隔字符串的实现示例
May 21 Python
简单介绍Python中的try和finally和with方法
May 05 #Python
python中的闭包用法实例详解
May 05 #Python
Python闭包实现计数器的方法
May 05 #Python
深入探究Python中变量的拷贝和作用域问题
May 05 #Python
Python使用metaclass实现Singleton模式的方法
May 05 #Python
python中查看变量内存地址的方法
May 05 #Python
Python中统计函数运行耗时的方法
May 05 #Python
You might like
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
jQuery的animate函数学习记录
2014/08/08 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
javascript帧动画(实例讲解)
2017/09/02 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
python实现问号表达式(?)的方法
2013/11/27 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
2014年社区庆元旦活动方案
2014/03/08 职场文书
学校对教师的评语
2014/04/28 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
治超工作实施方案
2014/05/04 职场文书
激励员工的口号
2014/06/16 职场文书
建设工程授权委托书
2014/09/22 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫