用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实现一个简单的验证码程序
Nov 03 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
python实现傅里叶级数展开的实现
Jul 21 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
Python hexstring-list-str之间的转换方法
Jun 12 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
pytorch 修改预训练model实例
Jan 18 Python
Python版中国省市经纬度
Feb 11 Python
适合Python初学者的一些编程技巧
Feb 12 Python
Python paramiko使用方法代码汇总
Nov 20 Python
Python下opencv库的安装过程及问题汇总
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 $_SERVER当前完整url的写法
2009/11/12 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
ThinkPHP模型详解
2015/07/27 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python文件排序的方法总结
2020/09/13 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
文员岗位职责范本
2014/03/08 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
中学生检讨书范文
2014/11/03 职场文书
爱的承诺书
2015/01/20 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技