python基础8_4-socketserver实现多并发

1、socketserver
socket只能够实现一对一的交互,socketserver能够实现多对多的交互,下面是使用socketserver的流程:

  1. 创建一个请求处理类,这个类继承BaseRequestHandler,并且重写父类的handle()方法
  2. 实例化一个server class(在这里我们使用TCPServer),并且传递server ip和上面创建的请求处理类给实例
  3. 调用server.handle.request()(处理个一个请求,不常用)/server.server.forever()(处理多个请求永远执行,常用)
  4. server.close()

接下来是socketserver端的代码:

# Author: Mr.Xue
# 2019.11.2
# socketserver.py

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler): # 创建一个请求处理类
	def handle(self): # 重写父类的handle()方法
		while True:
			#try:
			self.data = self.request.recv(1024).strip() # 接收客户端传来的数据
			if not self.data: # 判断客户端是否断连
				print("lost a link...")
				break
			print("{} wrote:".format(self.client_address[0]))
			print(self.data) # 打印接收的数据
			self.request.send(self.data.upper()) # 将接收到的数据转换成大写发回给客户端
			#except ConnectionResetError as e:
			#	print("err", e)
			#	break

if __name__ == '__main__':
	HOST, PORT = 'localhost', 6961 # 本地地址,端口号
	# create the server, binding to localhost on port 6961
	server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
	server.serve_forever() # 处理多个请求,永远执行
	server.close()				

2、客户端
客户端向服务器请求连接,连接上之后,再进行交互
客户端的流程如下:
1. 生成socket连接对象
2. 开始连接
3. 发送数据
4. 接收数据
5. 关闭sokect

具体实现的代码如下所示:

# Author: Mr.Xue
# 2019.10.29
# socket_client.py

import socket

client = socket.socket() # 声明socket类型,同时生成socket连接对象
client.connect(('localhost', 6961)) # 开始连接,ip地址为本地,端口号为6961
while True:
	msg = input(">>") # 输入要发送的信息
	print(len(msg)) 
	if len(msg) == 0: continue # 判断输入的信息是否为空,如果空,重新输入
	client.send(msg.encode("utf-8")) # 发送信息到服务器
	data = client.recv(1024) # 接收服务器发过来的信息
	print('client_recv:', data.decode()) # 打印服务器发来的信息
client.close() # 最后,关闭客户端

3、测试
在这里,我们启动两个客户端和一个服务器来做测试
先启动服务器

xue@xue-MacBookAir:~/python_learn$ python3 socketserver.py 

启动两个客户端

client1

xue@xue-MacBookAir:~/python_learn$ python3 socket_client.py 
>>

client2

xue@xue-MacBookAir:~/python_learn$ python3 socket_client.py 
>>

client1发送1,client2发送2
client1

xue@xue-MacBookAir:~/python_learn$ python3 socket_client.py 
>>1
1
client_recv: 1
>>

client2

xue@xue-MacBookAir:~/python_learn$ python3 socket_client.py 
>>1
2
client_recv: 2
>>

socketserver

xue@xue-MacBookAir:~/python_learn$ python3 socketserver.py 
127.0.0.1 wrote:
b'1'
127.0.0.1 wrote:
b'2'

这样就实现了多个用户同时和服务器进行交互的功能了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值