VirtualBox

Ticket #1851: pyserver

File pyserver, 1.8 KB (added by Martin Ducar, 17 years ago)
Line 
1#!/usr/bin/env python
2import SocketServer, time, socket, threading, os, sys
3def usage():
4 print "Usage: "+__file__+" unix_socket tcp_port"
5if len(sys.argv)!=3:
6 usage()
7 sys.exit(1)
8myHost = '' # server machine, '' means local host
9myPort = int(sys.argv[2])
10comSock = sys.argv[1] # listen on a non-reserved port number
11reader=[]
12
13def now():
14 return time.ctime(time.time())
15
16class ReadThread(threading.Thread):
17 def __init__(self,server,client):
18 self.server=server
19 self.client=client
20 threading.Thread.__init__ ( self )
21 def run(self):
22 while 1:
23 data=self.server.recv(8)
24 if not data: return 1
25 if len(reader)>0:
26 if data==reader[0]:
27 reader.pop[0]
28 else:
29 self.client.send(data)
30 else:
31 self.client.send(data)
32
33class WriteThread(threading.Thread):
34 def __init__(self,server,client):
35 self.server=server
36 self.client=client
37 threading.Thread.__init__ ( self )
38 def run(self):
39 while 1:
40 data=self.client.recv(8)
41 if not data: return 1
42 reader.append(data)
43 self.server.send(data)
44
45class MyClientHandler(SocketServer.BaseRequestHandler):
46
47 def handle(self):
48 print self.client_address, now()
49 time.sleep(5)
50 unix=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
51 if os.path.exists(comSock):
52 try:
53 unix.connect(comSock)
54 except Exception:
55 self.request.send('Port in use')
56 self.request.close()
57 unix.close()
58 else:
59 self.request.send('Vbox is not running')
60 unix.close()
61 self.request.close()
62 t1=ReadThread(unix,self.request)
63 t1.start()
64 t2=WriteThread(unix,self.request)
65 t2.start()
66 while t1.isAlive() and t2.isAlive():
67 pass
68 self.request.close()
69 unix.close()
70
71# make a threaded server, listen/handle clients forever
72myaddr = (myHost, myPort)
73server = SocketServer.ThreadingTCPServer(myaddr, MyClientHandler)
74server.serve_forever()

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette