#server.py
import socket
import select
sk = socket.socket()
sk.bind(('127.0.0.1',8099))
sk.listen()
read_lst = [sk]
while True:
rl,wl,xl = select.select(read_lst,[],[]) # select阻塞,rl可以读的 wl可以写的 xl可以改的 [sk,conn]
for item in rl:
if item == sk:
conn,addr = item.accept() # 有数据等待着它接收
read_lst.append(conn)
else:
ret = item.recv(1024).decode('utf-8')
if not ret:
item.close()
read_lst.remove(item)
else:
print(ret)
item.send(('received %s'%ret).encode('utf-8'))
# readlst [sk,conn,conn2,conn3] 100 问一百次
# select poll 随着要检测的数据增加 效率会下降
# select 有数目的限制
# poll 能处理的对象更多
# epoll 能处理多对象 不是使用轮询 回调函数 —— linux
import time
import socket
import threading
def client_async(args):
sk = socket.socket()
sk.connect(('127.0.0.1',8099))
for i in range(10):
time.sleep(2)
sk.send(('%s[%s] :hello'%(args,i)).encode('utf-8'))
print(sk.recv(1024))
sk.close()
for i in range(10):
threading.Thread(target=client_async,args=('*'*i,)).start()