用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编写一个国际象棋AI程序
Nov 28 Python
Python中逗号的三种作用实例分析
Jun 08 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python 自动重连wifi windows的方法
Dec 18 Python
对Python w和w+权限的区别详解
Jan 23 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
详解Python函数式编程—高阶函数
Mar 29 Python
Python3的高阶函数map,reduce,filter的示例详解
Jul 23 Python
numpy中的meshgrid函数的使用
Jul 31 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
javascript模拟命名空间
2015/04/17 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
Python collections模块实例讲解
2014/04/07 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
Apache部署Django项目图文详解
2019/07/30 Python
python 字典的打印实现
2019/09/26 Python
Python装饰器用法与知识点小结
2020/03/09 Python
pygame实现飞机大战
2020/03/11 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
python中xlutils库用法浅析
2020/12/29 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
装修五一活动策划案
2014/01/23 职场文书
现场活动策划方案
2014/08/22 职场文书
春季运动会开幕词
2015/01/28 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
初中语文教学研修日志
2015/11/13 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书