I succeed:

*on the server:*
import rpyc
from rpyc.utils.server import ThreadedServer, ForkingServer, OneShotServer

class DpaServerService(rpyc.Service): 
def exposed_open(self, filename):
return open(filename, "r")

if __name__ == '__main__':
server = ThreadedServer(DpaServerService, port = 12345)
server.start()


*and on the client:*
c = rpyc.connect("IP","PORT")
remote= c.root.open("File")
local = open("File","w")
shutil.copyfileobj(remote, local)
remote.close()
local.close() 




בתאריך יום רביעי, 10 בספטמבר 2014 09:38:33 UTC+3, מאת Yehonatan Arad:
>
> Thanks very much. I success now to copy the file, on classic mode.
> Now i want to change the method to service mode. (because security issues).
> What I need to do for this?
>
> On server I ran this file:
> class DoStuffService(rpyc.Service):
>    def on_connect(self):
>        "Do some things when a connection is made"
>    def on_disconnect(self):
>        "Do some things AFTER a connection is dropped"
>    def exposed_func1(self, *args, **kws):
>        "Do something useful and maybe return a value"
>    def exposed_func2(self, *args, **kws):
>        "Like func1, but do something different"
>
> if __name__ == '__main__':
>    rpyc.utils.server.ThreadedServer(DoStuffService).start()
>
> On client I tried to connect such:
> c = rpyc.connect(IP,PORT,service = "DoStuffService")
>
> I get this error, why it can be?
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "C:\Python26\lib\site-packages\rpyc\utils\factory.py", line 89, in 
> connect
>     s = SocketStream.connect(host, port, ipv6 = ipv6, keepalive = 
> keepalive)
>   File "C:\Python26\lib\site-packages\rpyc\core\stream.py", line 132, in 
> connect
>     return cls(cls._connect(host, port, **kwargs))
>   File "C:\Python26\lib\site-packages\rpyc\core\stream.py", line 102, in 
> _connect
>     s.connect(sockaddr)
>   File "<string>", line 1, in connect
> socket.error: [Errno 10061] No connection could be made because the target 
> machine actively refused it
>
>
> בתאריך יום רביעי, 10 בספטמבר 2014 08:02:07 UTC+3, מאת Tomer Filiba:
>>
>> Use c.builtin.open (or builtins, can't remember), not c.root.open
>> On Sep 10, 2014 1:05 AM, "Yehonatan Arad" <[email protected]> wrote:
>>
>>> Hi Tomer,
>>> I want to get file from server to the client.
>>> I configured the open function on the rpyc_classic.py but I didn't 
>>> success to call it from the other computer.
>>> I got this error:
>>> Can you help me?
>>> Thanks
>>>
>>> >>> remote = c.root.open("FILE")
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>>   File "C:\Python26\lib\site-packages\rpyc\core\netref.py", line 150, in 
>>> __getattr__
>>>     return syncreq(self, consts.HANDLE_GETATTR, name)
>>>   File "C:\Python26\lib\site-packages\rpyc\core\netref.py", line 71, in 
>>> syncreq
>>>     return conn.sync_request(handler, oid, *args)
>>>   File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 441, 
>>> in sync_request
>>>     raise obj
>>> AttributeError: 'SlaveService' object has no attribute 'exposed_open'
>>>
>>> ========= Remote Traceback (1) =========
>>> Traceback (most recent call last):
>>>   File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 305, 
>>> in _dispatch_request
>>>     res = self._HANDLERS[handler](self, *args)
>>>   File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 541, 
>>> in _handle_getattr
>>>     return self._access_attr(oid, name, (), "_rpyc_getattr", 
>>> "allow_getattr", getattr)
>>>   File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 507, 
>>> in _access_attr
>>>     return accessor(obj, name, *args)
>>>   File "C:\Python26\lib\site-packages\rpyc\core\service.py", line 69, in 
>>> _rpyc_getattr
>>>     return getattr(self, name)
>>> AttributeError: 'SlaveService' object has no attribute 'exposed_open'
>>> "
>>>
>>> בתאריך יום שלישי, 17 בפברואר 2009 14:52:05 UTC+2, מאת Tomer Filiba:
>>>>
>>>> nice, but you might want to check out rpyc/utils/classic.py -- it 
>>>> already has file transfer functionality :)
>>>> it does require the classic mode, but assuming you can get a remote 
>>>> file object,
>>>> you can just use shutil.copyfileobj (you should check out shutil, btw, 
>>>> if you're new to python)
>>>>
>>>> i.e.
>>>>
>>>> # == server ==
>>>> class FileService(rpyc.Service):
>>>>     def exposed_open(self, filename, mode = "r"):
>>>>         return open(filename, mode)
>>>>
>>>> # == client ==
>>>> c = rpyc.connect(host, port)
>>>>
>>>> # copy to client
>>>> remote = c.root.open("/foo/bar")
>>>> local = open("/tmp/foo/bar", "w")
>>>> shutil.copyfileobj(remote, local)
>>>>
>>>> # copy to server
>>>> local = open("/spam/bacon")
>>>> remote = c.root.open("/tmp/spam/bacon", "w")
>>>> shutil.copyfileobj(local, remote)
>>>>
>>>>
>>>> hope it helps,
>>>> -tomer
>>>>
>>>>
>>>> On Tue, Feb 17, 2009 at 14:30, CinnamonDonkey <
>>>> [email protected]> wrote:
>>>>
>>>>>
>>>>> No worries! I worked it out :)
>>>>>
>>>>> SERVER SHOULD BE:
>>>>>
>>>>>  class MyService( rpyc.Service ):
>>>>>    class exposed_FileTransfer(  ):
>>>>>       def exposed_Open( self, filename ):
>>>>>         print "FILE TRANSFER OPEN FUNCTION CALLED - " + filename
>>>>>        return 0
>>>>>
>>>>>  if __name__ == "__main__":
>>>>>    s = ThreadedServer( MyService, port = 1234, reuse_addr = True )
>>>>>    s.start()
>>>>>
>>>>>
>>>>> CLIENT SHOULD BE:
>>>>>
>>>>>  if __name__ == "__main__":
>>>>>    connection = rpyc.connect( options.serviceHostName,
>>>>> options.servicePortNum )
>>>>>     tf = connection.root.FileTransfer()
>>>>>    tf.Open(  "SPANKING~!!!" )
>>>>>
>>>>>
>>>>>
>>>>> On 17 Feb, 12:25, CinnamonDonkey <[email protected]>
>>>>> wrote:
>>>>> > I have written this on my server side:
>>>>> >
>>>>> >   class MyService( rpyc.Service ):
>>>>> >     class exposed_FileTransfer(  ):
>>>>> >       def exposed_Open( filename ):
>>>>> >         print "FILE TRANSFER OPEN FUNCTION CALLED - " + filename
>>>>> >         return 0
>>>>> >
>>>>> >   if __name__ == "__main__":
>>>>> >     s = ThreadedServer( MyService, port = 1234, reuse_addr = True )
>>>>> >     s.start()
>>>>> >
>>>>> > But on my client side I can't figure how to call it. I have tried:
>>>>> >
>>>>> >   if __name__ == "__main__":
>>>>> >     connection = rpyc.connect( options.serviceHostName,
>>>>> > options.servicePortNum )
>>>>> >     connection.root.FileTransfer.Open( "SPANKING~!!!" )
>>>>> >
>>>>> > But I get the error:
>>>>> >
>>>>> >   TypeError: unbounded method expose_Open() must be called with
>>>>> > exposed_FileTransfer instance as first argument.
>>>>> >
>>>>> > eh? I tried:
>>>>> >
>>>>> >   if __name__ == "__main__":
>>>>> >     connection = rpyc.connect( options.serviceHostName,
>>>>> > options.servicePortNum )
>>>>> >     ft = connection.root.FileTransfer
>>>>> >     ft.Open( "SPANKING~!!!" )
>>>>> >
>>>>> > and that does not work... I'm confussed.
>>>>> >
>>>>> > Please help.
>>>>> >
>>>>> > On 17 Feb, 09:17, CinnamonDonkey <[email protected]>
>>>>> > wrote:
>>>>> >
>>>>> > > Thanx for the reply RedBaron.
>>>>> >
>>>>> > > I agree, I don't think it is the best way of doing a file transfer 
>>>>> but
>>>>> > > based on my limited knowledge of Python and RPyC I'd rather spend 
>>>>> my
>>>>> > > time learning a few systems well than lots of systems badly. At 
>>>>> least
>>>>> > > that is my theory at the moment, everything is subject to change 
>>>>> ;-).
>>>>> >
>>>>> > > I do need, RPC for some genuine tasks later so I figured this 
>>>>> would be
>>>>> > > a good starting point as it satisfies two goals. How to transfer my
>>>>> > > file and how to use RPyC :-D.
>>>>> >
>>>>> > > I have to say, I am very impressed with this Python'ing lark... Oh
>>>>> > > what I have been missing all these years ;-).
>>>>> >
>>>>> > > On 17 Feb, 09:05, redbaron <[email protected]> wrote:
>>>>> >
>>>>> > > > Are you sure that RPyC is a good way to do it? I'm not sure but 
>>>>> try to
>>>>> > > > open file and then send file handler to remote service. As it 
>>>>> said in
>>>>> > > > docs all objects are passed by reference, so reading from that 
>>>>> handler
>>>>> > > > on remote side will actually make transfer from local machine to
>>>>> > > > remote onee. I'm not sure will it work or not, but you could try 
>>>>> it =)
>>>>> >
>>>>> > > > f = open(/path/to/file,"rb")
>>>>> > > > ... send of on remote side
>>>>> > > > ....do f.read() on remote side.
>>>>> >
>>>>> > > > be careful that f.read() will allocate memory equal to file 
>>>>> size, if
>>>>> > > > its really big then try to read it chunk by chunk like:
>>>>> >
>>>>> > > > g = open("/path/where/to/write","wb")
>>>>> > > > chunk = f.read(1024*1024)
>>>>> > > > while chunk:
>>>>> > > >   g.write(chunk)
>>>>> > > >   chunk = f.read(1024*1024)
>>>>> >
>>>>> >
>>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> An NCO and a Gentleman
>>>>  
>>>  -- 
>>>
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "rpyc" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"rpyc" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to