用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实现通过shelve修改对象实例
Sep 26 Python
Python 3中的yield from语法详解
Jan 18 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python实现转圈打印矩阵
Mar 02 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
浅谈python新式类和旧式类区别
Apr 26 Python
python日期相关操作实例小结
Jun 24 Python
python内打印变量之%和f的实例
Feb 19 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
Python中zipfile压缩包模块的使用
May 14 Python
python调试工具Birdseye的使用教程
May 25 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
js模拟类继承小例子
2010/07/17 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
python将文本转换成图片输出的方法
2015/04/28 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python3实现绘制二维点图
2019/12/04 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
中学教师培训制度
2014/01/31 职场文书
销售经理岗位职责
2014/03/16 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
新手上路标语
2014/06/20 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
工资证明格式模板
2015/06/12 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
python标准库ElementTree处理xml
2022/05/20 Python