# -*- coding: utf-8 -*- # @Time : 2018/7/12 0012 20:29 import socket server = socket.socket() server.setblocking(False) server.bind(('',9001)) # 绑定ip,和端口, server.listen(5) con_l = [] while 1: try: con,addr = server.accept() con.setblocking(False) con_l.append(con) except BlockingIOError: pass del_l = [con for con in con_l] for con in con_l: try: recv_data = con.recv(1024) if recv_data: print(recv_data) con.send(recv_data) else: con.close() con_l.remove(con) except BlockingIOError: pass
# -*- coding: utf-8 -*- # @Time : 2018/7/13 0013 5:2 import socket,selectors epoll_secret = selectors.DefaultSelector() # Epollselecter() sever = socket.socket() sever.bind(('',9002)) sever.listen(1000) def read(conn): rec_data = conn.recv(1024) if rec_data: conn.send(rec_data) else: epoll_secret.unregister() # 如果客户端断开,就取消对应的注册事件 conn.close() def accept(ser): conn,addr = sever.accept() # 处理事件 epoll_secret.register( conn,selectors.EVENT_READ,read ) # 注册事件 epoll_secret.register( sever, selectors.EVENT_READ,accept) # 3 个参数: 监听套接字, 可读, 回调函数 # 事件说明:当监听到有活跃客户端(可读)发生时,运行指定函数 while True: # 开启事件 # 循环查询客户端事件,把连接的客户端写入列表 , events = epoll_secret.select() # print(events) # # [(SelectorKey(fileobj=<socket.socket fd=608, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 9002)>, fd=608, events=1, data=<function accept at 0x000001A04AEE6A60>), 1)] # events[0] 中有监听套接字,accept 的函数 for key,m in events: sock = key.fileobj # 获取 监听套接字 callback = key.data # 获取 accept callback( sock ) # == def accept(ser) 的调用