SocketServer包对socket包进行了包装(封装),使得创建socket服务非常简单。

TCPServer+BaseRequestHandler

使用TCPServerBaseRequestHandler编写socket服务的样例。

#-*- coding:utf-8 -*-from SocketServer import TCPServer, BaseRequestHandler
import tracebackclass MyBaseRequestHandlerr(BaseRequestHandler):"""#从BaseRequestHandler继承,并重写handle方法"""def handle(self):#循环监听(读取)来自客户端的数据while True:#当客户端主动断开连接时,self.recv(1024)会抛出异常try:#一次读取1024字节,并去除两端的空白字符(包括空格,TAB,\r,\n)data = self.request.recv(1024).strip()#self.client_address是客户端的连接(host, port)的元组print "receive from (%r):%r" % (self.client_address, data)#转换成大写后写回(发生到)客户端
                self.request.sendall(data.upper())except:traceback.print_exc()breakif __name__ == "__main__":#telnet 127.0.0.1 9999host = ""       #主机名,可以是ip,像localhost的主机名,或""port = 9999     #端口addr = (host, port)#购置TCPServer对象,server = TCPServer(addr, MyBaseRequestHandlerr)#启动服务监听server.serve_forever()

  

TCPServer+StreamRequestHandler

使用TCPServerStreamRequestHandler编写socket服务的样例。StreamRequestHandler从BaseRequestHandler,并做了封装,使得读写数据更容易。

#-*- coding:utf-8 -*-from SocketServer import TCPServer, StreamRequestHandler
import tracebackclass MyStreamRequestHandlerr(StreamRequestHandler):"""#StreamRequestHandler,并重写handle方法#(StreamRequestHandler继承自BaseRequestHandler)"""def handle(self):while True:#客户端主动断开连接时,self.rfile.readline()会抛出异常try:#self.rfile类型是socket._fileobject,读写模式是"rb",方法有#read,readline,readlines,write(data),writelines(list),close,flushdata = self.rfile.readline().strip()#self.client_address是客户端的连接(host, port)的元组print "receive from (%r):%r" % (self.client_address, data)#self.wfile类型是socket._fileobject,读写模式是"wb"
                self.wfile.write(data.upper())except:traceback.print_exc()breakif __name__ == "__main__":#telnet 127.0.0.1 9999host = ""       #主机名,可以是ip,像localhost的主机名,或""port = 9999     #端口addr = (host, port)#购置TCPServer对象,server = TCPServer(addr, MyStreamRequestHandlerr)#启动服务监听server.serve_forever()

ThreadingTCPServer+StreamRequestHandler=多线程socket

使用ThreadingTCPServerStreamRequestHandler编写socket服务的样例。ThreadingTCPServer从ThreadingMixIn和TCPServer继承,实现多线程。

#-*- coding:utf-8 -*-from SocketServer import ThreadingTCPServer, StreamRequestHandler
import tracebackclass MyStreamRequestHandlerr(StreamRequestHandler):"""#StreamRequestHandler,并重写handle方法#(StreamRequestHandler继承自BaseRequestHandler)"""def handle(self):while True:#客户端主动断开连接时,self.rfile.readline()会抛出异常try:#self.rfile类型是socket._fileobject,读写模式是"rb",方法有#read,readline,readlines,write(data),writelines(list),close,flushdata = self.rfile.readline().strip()#self.client_address是客户端的连接(host, port)的元组print "receive from (%r):%r" % (self.client_address, data)#self.wfile类型是socket._fileobject,读写模式是"wb"
                self.wfile.write(data.upper())except:traceback.print_exc()breakif __name__ == "__main__":#telnet 127.0.0.1 9999host = ""       #主机名,可以是ip,像localhost的主机名,或""port = 9999     #端口addr = (host, port)#ThreadingTCPServer从ThreadingMixIn和TCPServer继承#class ThreadingTCPServer(ThreadingMixIn, TCPServer): passserver = ThreadingTCPServer(addr, MyStreamRequestHandlerr)#启动服务监听server.serve_forever()

多线程socket效果:

样例代码下载

Python使用TCPServer编写(多线程)Socket服务相关推荐

  1. Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态

    通过 getattr(socket, '_closed') 的返回值可以判断服务端的运行状态. True 是关闭状态,False 是运行中. 实例代码展示: import socketip = 'lo ...

  2. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  3. 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写

    一.学习目标 了解C语言的socket的概念 了解C语言socket的使用方法 完成C语言socket服务端 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习 ...

  4. 多线程+SOCKET编程实现qq群聊的服务端和客户端

    多线程+SOCKET编程实现qq群聊的服务端和客户端 标签(空格分隔): 多线程 网络编程 线程同步 一.设计思路 1.服务端 每来一个客户端连接,服务端起一个线程维护: 将收到的消息转发给所有的客户 ...

  5. 第五天:了解越疆dobot机械臂,使用python,编写通过ros服务控制机械臂运动程序

    一.了解越疆dobot机械臂 详细信息可以查看用户手册和API开发手册,以及其它官方提供资料,这里我只列出我在开发过程中遇到的问题,以及需要了解的知识点. (1)坐标系 我们可以看到这里涉及的坐标系主 ...

  6. Python 最简单的我的第一个聊天室QQ软件【基于Socket服务】

    文章目录 什么是Socket Python for socket 最简单程序通讯 基本函数介绍 MyChat 原理解释 服务端 原理 代码 客户端 原理 代码 使用介绍 全局代码 什么是Socket ...

  7. Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...

    由于主机名为中文导致的 flask 服务起不来,报错如下: File "D:\work\python3.9_64\lib\socket.py", line 791, in getf ...

  8. Python全栈开发:socket

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  9. 学习C++项目—— 搭建多线程网络服务框架,性能测试(并发性能测试,业务性能测试,客户端响应时间测试,网络带宽测试)

    学习计算机网络编程 一.思路和学习方法   本文学习于:C语言技术网(www.freecplus.net),在 b 站学习于 C 语言技术网,并加以自己的一些理解和复现,如有侵权会删除.   接下来对 ...

  10. Python 中最全面的 Socket 编程指南

    (点击上方公众号,可快速关注一起学Python) 翻译:  keelii   链接: https://keelii.com/2018/09/24/socket-programming-in-pytho ...

最新文章

  1. Android被逼学习小例子1
  2. golang copy函数
  3. 使用Spring编写和使用SOAP Web服务
  4. python怎么学习一门语言_如何学习Python这一门语言
  5. BZOJ4199 NOI2015品酒大会(后缀树)
  6. Java使用RSA加密解密及签名校验
  7. 请求之前~HttpHandler实现媒体文件和图像文件的盗链
  8. UVA11040 Add bricks in the wall【数学】
  9. Oracle exp/imp导入不同的表空间
  10. java中String字符串
  11. python 过采样算法_类不平衡数据分类准确率的提升算法smote过采样方法
  12. Android Studio简介
  13. 十大排行优惠券app,哪个更适合
  14. 【贪玩巴斯】一文学会检索三要素:检索字段、检索词、检索算法检索(二)——「一文学会检索三要素:检索字段、检索词、检索算法」 2021-09-18
  15. 冯诺依曼计算机硬件系统,冯·诺依曼型计算机硬件组成
  16. html表格背景图片格式,CSS常见样式(二)——列表,背景,边框,行高,表格,vertical-align...
  17. 路由器与交换机基本原理
  18. ArrayList扩容机制源码分析
  19. 植物大战僵尸自动拾取阳光
  20. 实体中list属性为空或者null,设置为空数组

热门文章

  1. HDU 4649 Professor Tian(概率DP)题解
  2. CSUST-2018区域赛选拔个人赛-1019 看直播(二分+DP)
  3. Scrapy 导出的 cvs 文件,双击打开乱码问题
  4. JS一秒区分clientX,offsetX,screenX,pageX之间关系
  5. 编程之美:从无头单链表中删除节点,讨论
  6. hdu - 4647 - Another Graph Game
  7. 在flex4中使用asdoc生成api文档
  8. 计算机软件著作权登记指南
  9. Win32 网络编程基本函数
  10. CommandTarget属性