Winand

Untitled

Jan 6th, 2013
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.04 KB | None | 0 0
  1. class ServerDict(object):
  2.     def __recv_data(self):
  3.         msglen = ''
  4.         while len(msglen) != 4:
  5.             chunk = self.sock.recv(4-len(msglen))
  6.             if chunk == '': raise RuntimeError("socket connection broken")
  7.             msglen = msglen + chunk
  8.         msg, msglen= '', struct.unpack('!i', msglen)[0]
  9.         while len(msg) != msglen:
  10.             chunk = self.sock.recv(msglen-len(msg))
  11.             if chunk == '': raise RuntimeError("socket connection broken")
  12.             msg = msg + chunk
  13.         return marshal.loads(msg)
  14.        
  15.     def __send_data(self, data):
  16.         self.sock.send(marshal.dumps(data))
  17.         res = self.__recv_data()
  18.         return res
  19.        
  20.     def __init__(self, serv, port, name=""):
  21.         self.name=os.urandom(16).encode('hex') if not name else name
  22.         self.server=serv
  23.         self.port=port
  24.         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  25.         self.sock.connect((self.server, self.port))
  26.         self.__send_data((self.name,(),{}))
  27.        
  28.     def __del__(self): #Remove variable on server side
  29.         self.sock.close()
  30.  
  31.     def __setitem__(self, i, y):
  32.         if type(i) is not tuple: i=(i,)
  33.         self.__send_data((self.name,i,y))
  34.  
  35.     def __getitem__(self, i):
  36.         if type(i) is not tuple: i=(i,)
  37.         return self.__send_data((self.name, i))
  38.        
  39.     def __repr__(self):
  40.         return repr(self.__getitem__(()))
  41.  
  42. d=ServerDict('127.0.0.1', 13373, "sessions")
  43. d[1] = {2:3,4:5}
  44.  
  45.  
  46. ###############
  47. Traceback (most recent call last):
  48.   File "C:\WinPython-32bit-2.7.3.2\tcpclient.py", line 82, in <module>
  49.     d[1] = {2:3,4:5}
  50.   File "C:\WinPython-32bit-2.7.3.2\tcpclient.py", line 70, in __setitem__
  51.     self.__send_data((self.name,i,y))
  52.   File "C:\WinPython-32bit-2.7.3.2\tcpclient.py", line 49, in __send_data
  53.     res = self.__recv_data()
  54.   File "C:\WinPython-32bit-2.7.3.2\tcpclient.py", line 37, in __recv_data
  55.     chunk = self.sock.recv(4-len(msglen))
  56. socket.error: [Errno 10053] Программа на вашем хост-
Advertisement
Add Comment
Please, Sign In to add comment