0
xmlrpcを使ってPythonでクライアントとサーバーを構築しようとしていますが、メソッドを持つFunctionWrapperクラスを使用しなければなりません。 sendMessage_wrapper(self、message)、サーバーは別のクラスで宣言されていますが、サーバーにメソッドを登録しようとしていますが、クライアントからメソッドを呼び出すときに発生します。Pythonでxmlrpcを使ってサーバーとクライアントを構築する
Cliente:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
from os import path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from Constants.Constants import *
class MyApiClient:
def __init__(self, contact_port = DEFAULT_PORT,contact_ip=LOCALHOST_CLIENT):
self.contact_port = contact_port
self.contact_ip = contact_ip
self.proxy = xmlrpclib.ServerProxy(contact_ip+str(self.contact_port)+"/")
def sendMessage(self,message):
self.proxy.sendMessage_wrapper(message)
a = MyApiClient()
a.sendMessage("Hi")
a.sendMessage("WORKING")
サーバー:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
from os import path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
from Constants.Constants import *
class MyApiServer:
def __init__(self,wrapper, my_port = DEFAULT_PORT):
self.port = my_port
self.server = SimpleXMLRPCServer((LOCALHOST,self.port))
self.wrapper = wrapper
self.server.register_instance(self.wrapper)
print("Running")
self.server.serve_forever()
class FunctionWrapper:
def __init__(self):
self.message = None
"""
Procedimiento que ofrece nuestro servidor, este metodo sera llamado
por el cliente con el que estamos hablando, debe de
hacer lo necesario para mostrar el texto en nuestra pantalla.
"""
def sendMessage_wrapper(self, message):
self.message = message
self.showMessage()
def showMessage(self):
print ("Mensaje "+self.message)
#raise NotImplementedError("Should have implemented this")
a = FunctionWrapper()
b = MyApiServer(a)
を必要とする場合の定数は、私はクライアント self.proxy = xmlrpclibで使用してそれを解決しています。 ServerProxy(contact_ip + str(self.contact_port)+ "/"、allow_none = True) これはサーバーで: self.server = SimpleXMLRPCServer((LOCALHOST、self.port)、allow_none = True) –