Python socket实现处理多个连接
socket实现处理多个连接 |
实现处理多个连接
使用whlie循环实现多个客户端,排队请求服务端
循环监听端口发送信息(windos,Linux)
1.Linux 系统如果客户端断开连接,会循环打印
2.Windos 系统如果客户端断开连接,会报错中断
3.案例:在linux系统下实现
4.需求:可以实现单个用户断开,并同过排队对服务端访问。
客户端
#客户端Linux系统下:输入命令通过服务端返回 import socket #声明协议类型,同事生成socket连接对象 client = socket.socket() #链接地址和端口,元组(本地,端口) client.connect(('localhost',6969)) #使用input循环向服务端发送请求 while True: msg = input(">>:").strip() if len(msg) == 0:continue #发送数据 b将字符串转为bys类型 client.send(msg.encode("utf-8")) #接收服务器端的返回,需要声明收多少,默认1024字节 data = client.recv(1024) #打印data是recv的data print("recv:",data) #关闭接口 client.close()
服务端
#服务端Linux系统下:处理命令并返回 import socket import os #声明类型,生成socket链接对象 server = socket.socket() #监听接收端口元组(本地,端口),绑定要监听的端口 server.bind(('localhost',6969)) #1.监听 #2.“5”最大监听数,允许多少人在排队 server.listen(5) print("我要开始等待客户端了") #循环锁定访问客户端 while True: #1.等待客户端 #会返回链接的标记位conn,与连接的地址 #2.客户端同过conn,addr进行通话 #3.conn就是客户端连接过来而在服务器端为其生成的一个连接实例 conn,addr = server.accept() #查看标记位与IP地址 print(conn,addr) print("客户端 他 进来了!") #循环处理客户端请求 while True: #1.接收数据,1024字节 #2.如果发不完会存在缓冲去,下次在发送。 #3.缓冲区每次最多发32768字节 #4.每个系统不同,超出数值会有限制。 data = conn.recv(102400) #返回 print(data) #Linux系统内可以判断是否为空。 if not data:break #执行命令,赋值给变量 res = os.popen(data).read() #返回一个值,返回res命令 conn.send(res) #sendll就是循环send,用法发送大型文件。 #conn.sendll(res) #关闭链接 server.close()