用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使用自定义user-agent抓取网页的方法
Apr 15 Python
Python实现视频下载功能
Mar 14 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
Python使用while循环花式打印乘法表
Jan 28 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
记录模型训练时loss值的变化情况
Jun 16 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
python析构函数用法及注意事项
Jun 22 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
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
PHP中的self关键字详解
2019/06/23 PHP
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
python实现简单的计时器功能函数
2015/03/14 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Django中的forms组件实例详解
2018/11/08 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python写程序统计词频的方法
2019/07/29 Python
Python处理session的方法整理
2019/08/29 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
使用Python实现批量ping操作方法
2020/05/06 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
实习生个人的自我评价
2013/12/08 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
个人维稳承诺书
2015/05/04 职场文书
转正申请报告格式
2015/05/15 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang