用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中MySQLdb和torndb模块对MySQL的断连问题处理
Nov 09 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
python操作kafka实践的示例代码
Jun 19 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
python 非线性规划方式(scipy.optimize.minimize)
Feb 11 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
cookies应对python反爬虫知识点详解
Nov 25 Python
总结python多进程multiprocessing的相关知识
Jun 29 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP多文件上传类实例
2015/03/07 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
深入理解Django-Signals信号量
2019/02/19 Python
Python中的self用法详解
2019/08/06 Python
python保留小数位的三种实现方法
2020/01/07 Python
python小白学习包管理器pip安装
2020/06/09 Python
基于Python正确读取资源文件
2020/09/14 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
数据库基础的一些面试题
2012/02/25 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
技术学校毕业生求职信分享
2013/12/02 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
工商管理专业自荐信
2014/06/03 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
房屋维修申请报告
2015/05/18 职场文书
党员公开承诺书2016
2016/03/24 职场文书