#服务端
import socket
import select, queue
server = socket.socket()
server.bind(("127.0.0.1", 8999))
server.listen(1000)
inputs = [server,]#建立的连接
outputs = []#输出的连接
msg_dic = {}#存储连接队列的字典
while True:
readable, writeable, exceptional = select.select(inputs, outputs, inputs)
for r in readable:
if r is server:#如果是新建立的连接则实例化
conn,addr = server.accept()
print("建立了新的连接",addr)
msg_dic[conn] = queue.Queue()#把此连接的队列存储到字典里
inputs.append(conn)
else:
data = r.recv(1024).decode()#不是新建立的连接,则接收数据
msg_dic[r].put(data)#把接收的数据存入队列中
outputs.append(r)#把此连接加入到待发送列表
# print(r)
# r.send(data.upper().encode("utf-8"))
for w in writeable:#接收发送相互独立
data = msg_dic[w].get()#从队列中取出数据
w.send(data.upper().encode("utf-8"))#发送数据
outputs.remove(w)#在待发送列表中中删除此连接
for e in exceptional:#如果连接断开
inputs.remove(e)#在已建立的列表中删除此连接
outputs.remove(e)#在待发送列表中删除此连接
del msg_dic[e]#删除此连接的队列
#客户端
from socket import *
client=socket(AF_INET,SOCK_STREAM)
client.connect(('127.0.0.1',8999))
while True:
msg=input('>>: ').strip()
if not msg:continue
client.send(msg.encode('utf-8'))
data=client.recv(1024)
print(data.decode('utf-8'))
client.close()