服务端
from socket import *
import time
server = socket(AF_INET,SOCK_STREAM)
server.bind(('127.0.0.1',8081))
server.listen(3)
server.setblocking(False) #accept变为非阻塞状态,
print('server startting...')
conn_l = [] #存放原始数据
del_l = [] #存放错误的数据
while True: #链接循环
try:
print('=====>',conn_l) #链接地址
conn,addr = server.accept() #如果没有异常处理立马抛出错误 conn是链接,可以收发消息
# print(addr)
conn_l.append(conn)
except BlockingIOError: #收不到数据干这里的
time.sleep(4) #休眠两秒,继续
for conn in conn_l: #再次循环列表中的conn
try:
data = conn.recv(1024)
conn.send(data.upper())
except BlockingIOError:
pass
except ConnectionResetError:
del_l.append(conn) #错误的conn添加到del_l
for obj in del_l:
obj.close() #和conn.close 一样,只是换了个名字
conn_l.remove(obj) #将那个错误的obj直接从元列表删除
del_l = [] #清空列表 清空之后下次还可以接收,删除了就没地方存放他的值
continue
#新建一个存放错误值的列表,然后
客户端
from socket import *
client = socket(AF_INET,SOCK_STREAM)
client.connect(('127.0.0.1',8081))
while True:
msg = input('p;ease:').strip()
if not msg:continue
client.send(msg.encode('utf-8'))
data = client.recv(1024)
print(data.decode('utf-8'))