python之socketserver实现并发
服务端
import socketserver
#socketserver模块是用来实现并发
# 我们自己的类里一定要继承socketserver.BaseRequestHandler方法
# 里面需要一个handle方法
# 每当客户端来连接时,就会创建一个实例,实例与实例之间独立
# 实例包含
# self.request:conn 作用:服务端收发信息的对象
# self.client_address:addr 作用:客户端的ip地址
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
print("conn is:"+str(self.request))
print("conn is:" + str(self.client_address)) #通讯循环
while True:
#收信息
try:
data = self.request.recv(1024).decode('utf-8')
if data:
print("客户端发过来的信息:" + data) # 发信息
self.request.sendall(data.upper().encode('utf-8'))
except Exception as e:
continue
if __name__=="__main__":
#链接循环
#这个方法需要两个参数,((ip,port),Myserver)
s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),Myserver)
#永远运行
s.serve_forever() #socketserver.ThreadingTCPServer()方法循环不端的接收新的连接
#handle()方法与客户端循环进行通讯
客户端
import socket def main():
ip_port = ('127.0.0.1', 8080) s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s2.connect(ip_port) # 连接服务端 while 1:
data1 = input("-->").strip()
if not data1:continue
if data1 =='quit':break
s2.sendall(data1.encode('utf8'))
data2=s2.recv(1024)
print(data2.decode("utf-8"))
if __name__ == '__main__':
main()
关于socketserver更多的介绍和使用,可以看一下这篇博文: