SocketServer-实现并发处理3
2024-09-03 18:47:07
用socketserver创建一个服务的步骤:
1 创建一个request handler class(请求处理类),合理选择StreamRequestHandler和DatagramRequestHandler之中的一个作为父类(当然,使用BaseRequestHandler作为父类也可),并重写它的handle()方法。
2 实例化一个server class(服务类)对象,并将服务的地址和之前创建的request handler class传递给它。
3 调用server class对象的handle_request() 或 serve_forever()方法来开始处理请求。
服务器端代码:
import socketserver class MyTCPHandler(socketserver.BaseRequestHandler): #自己写的请求处理类,每个客户端的请求过来,都会实例它。MyTCPHandler def handle(self): #重写请求处理类的handle(),跟客户端所有的交互都是在handle里完成的。
while True:
try:
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0])) #打印客户端的IP地址
print(self.data) self.request.sendall(self.data.upper()) #变成大写,传回给客户端。
except ConnectionResetError as e:
print('Error is: ',e) #客户端断开时抛出的异常
break if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) #实例化一个server class(服务类)对象,并将服务的地址和之前创建的request handler class传递给它
server.serve_forever() #调用server class对象的serve_forever()方法来开始处理请求。处理多个请求。
客户端代码:
import socket
client=socket.socket()
client.connect(('localhost',9999))
while True:
msg=input(">>:").strip()
if len(msg)==0:continue
client.send(msg.encode('utf-8'))
data=client.recv(1024)
print("recv:",data.decode())
client.close()
最新文章
- Jmeter3.0发布,版本更新都更新了什么
- 用collectionview实现瀑布流-转(后面附demo,供参考)
- C#交错数组的用法
- extjs学习(关于grid)
- WCF小结
- 放松时刻——C#分割字符串
- FZU 2214 Knapsack problem 01背包变形
- JavaWeb项目开发案例精粹-第2章投票系统-003Dao层
- BZOJ 1741: [Usaco2005 nov]Asteroids 穿越小行星群
- 《Unix环境高级编程》环境搭建
- 从零开始学习UNITY3D(GUI篇 GUI.Window)
- (转)Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- vue UI库iview源码解析(2)
- ansible学习(二)
- vue解决前后端跨域问题
- 多个gridSelect引用同一个dizData
- [原][粒子特效][spark]插值器interpolator
- stack &;&; queue
- Python实现Json结构对比的小工具兼谈编程求解问题
- 2017百度春招<;有趣的排序>;
热门文章
- 3D Touch初探
- ORB-SLAM(五)KeyFrame类-最小生成树
- Servlet的5种方式实现表单提交(注册小功能)
- MySQL☞in语句
- Web自动化selenium技术快速实现爬虫
- Linux命令应用大词典-第45章 服务器配置
- jmeter链接数据库问题汇总
- Map Reduce Application(Join)
- 蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)(转载)
- 【转】自定义(滑动条)input[type=";range";]样式