Python CODE——Nonblocking I/O client AND Delaying Server

 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,spindir
12     spinstr='.'*spinpos+'|'+'.'*(spinsize-spinpos-1)
13     sys.stdout.write('\r'+spinstr+'  ')
14     sys.stdout.flush()
15 
16     spinpos+=spindir
17     if spinpos<0:
18         spindir=1
19         spinpos=1
20     elif spinpos>=spinsize:
21         spinpos-=2
22         spindir=-1
23 
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                 break
38         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         raise
17     except:
18         traceback.print_exc()
19         continue
20 
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                 break
29             time.sleep(2)
30     except (KeyboardInterrupt,SystemExit):
31         raise
32     except:
33         traceback.print_exc()
34 
35     try:
36         clientsock.close()
37     except KeyboardInterrupt:
38         raise
39     except:
40         traceback.print_exc()

 

posted @ 2014-11-05 16:16  落叶落叶  阅读(357)  评论(0编辑  收藏  举报