#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
def deal_req(c, req):
print(req)
c.send(req.upper().encode('utf-8'))
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.setblocking(False)
sk.listen()
conn_l = []
del_l = []
while True:
try:
conn,addr = sk.accept() # 阻塞,直到有一个客户端来连我
print(conn)
conn_l.append(conn)
except BlockingIOError: # 因为是非阻塞模型,所以在没有收取到连接时,会报错
for c in conn_l:
try:
req = c.recv(1024).decode('utf-8') # 如果没有信息到来,又是非阻塞,故此会报错
if not req: # 如果连接异常断开,则走msg为空
del_l.append(c)
continue
deal_req(c, req)
except BlockingIOError:pass
for c in del_l:
conn_l.remove(c)
del_l.clear()
sk.close()
python3 非阻塞IO模型实现服务端(备忘记录说明)
最新推荐文章于 2024-01-23 14:16:33 发布