您的位置:首页 > 编程语言 > Python开发

Python socket实现处理多个连接

2017-11-15 13:33 399 查看
 
 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()

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: