1 #!Nonblocking I/O - Chapter 5 -pollclient.py 2 import socket,sys,select 3 port=51423 4 host='localhost' 5 6 spinsize=10 7 spinpos=0 8 spindir=1 9 10 def spin():11 global spinsize,spinpos,spindir12 spinstr='.'*spinpos+'|'+'.'*(spinsize-spinpos-1)13 sys.stdout.write('\r'+spinstr+' ')14 sys.stdout.flush()15 16 spinpos+=spindir17 if spinpos<0:18 spindir=119 spinpos=120 elif spinpos>=spinsize:21 spinpos-=222 spindir=-123 24 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)25 sock.connect((host,port))26 27 p=select.poll()28 p.register(sock.fileno(),select.POLLIN|select.POLLERR|select.POLLHUP)29 30 while True:31 results=p.poll(2002)32 if len(results):33 if results[0][1]==select.POLLIN:34 data=sock.recv(4096).decode()35 if not len(data):36 print("\rRemote end closed connection; exiting.")37 break38 sys.stdout.write("\rReceived :"+data)39 sys.stdout.flush()40 spin()41 else:42 print("\rProblem occurred; exiting")43 sys.exit(0)
1 #!Delaying Server - Chapter 5 -delayserver.py 2 import socket,traceback,time 3 4 host="" 5 port=51423 6 7 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 8 sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 9 sock.bind((host,port))10 sock.listen(1)11 12 while True:13 try:14 clientsock,clientaddr= sock.accept()15 except KeyboardInterrupt:16 raise17 except:18 traceback.print_exc()19 continue20 21 try:22 print("Got connection from ",clientsock.getpeername)23 while True:24 try:25 print(time.asctime().encode())26 clientsock.sendall(time.asctime().encode()+b"\n")27 except:28 break29 time.sleep(2)30 except (KeyboardInterrupt,SystemExit):31 raise32 except:33 traceback.print_exc()34 35 try:36 clientsock.close()37 except KeyboardInterrupt:38 raise39 except:40 traceback.print_exc()