码迷,mamicode.com
首页 > 编程语言 > 详细

python基础 socketserver

时间:2020-02-26 23:05:01      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:需要   bre   base   data   import   客户   自己   odi   end   

socket只能处理一个client连接,如果需要并发处理多个链接则需要使用socketserver,下面是代码示例以及注释

server端

 1 import socketserver
 2 #之前的socket只能同时处理一个客户端,当需要并发处理client发送的信息是需要使用到socketserver,下面创建一个类,继承socketserver其对应实例就有并发能力
 3 class My_Tcp_Handler(socketserver.BaseRequestHandler):
 4     #下面的handler是自己定义的server与client交互的过程,所有交互过程都在此方法内部实现.方法名handle是固定的
 5     def handle(self):
 6         while True:
 7             try:
 8                 #下面将收到的数据打印并且大写后发回给客户端
 9                 self.data = self.request.recv(1024)
10                 print(self.data.decode(encoding="utf-8"))
11                 self.send_data = self.data.decode(encoding="utf-8").upper().encode(encoding="utf-8")
12                 self.request.sendall(self.send_data)
13             except ConnectionResetError as e:
14                 print("一个客户端关闭了连接")
15                 break
16 
17 #实例化socketserver
18 My_server = socketserver.ThreadingTCPServer(("0.0.0.0", 8888), My_Tcp_Handler) #ThreadingTCPServer是使用多线程,ForkingTCPServer是使用多进程处理并发
19 #启动实例
20 My_server.serve_forever()

下面是client端

 1 import socket
 2 client = socket.socket()
 3 client.connect(("127.0.0.1", 8888))
 4 while True:
 5     msg = input()
 6     if len(msg) == 0:
 7         continue
 8     client.send(msg.encode(encoding="utf-8")) #如果发送中文需要对其进行encode,接收也需要decode;英文前面直接加b指定类型
 9     client_rec = client.recv(1024).decode(encoding="utf-8")
10     print("client_rec:", client_rec)
11 client.close()

 

python基础 socketserver

标签:需要   bre   base   data   import   客户   自己   odi   end   

原文地址:https://www.cnblogs.com/flags-blog/p/12369399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!