2016-08-17 3 views
0

Ich versuche, einen Client und einen Server mit xmlrpc in Python zu bauen, ich habe eine Klasse mit dem Namen FunctionWrapper zu verwenden, die eine Methode hat und der Kunde es verwenden, den Namen des Verfahrens ist sendMessage_wrapper (self, message), und der Server ist in einer anderen Klasse deklariert, ich versuche die Methode auf dem Server zu registrieren, aber wenn ich die Methode von de client rufe raise und error, kannst du mir bitte helfen?einen Server und Client mit xmlrpc in Python Gebäude

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") 

Server:

#! /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) 

Antwort

0

Hier sind die Konstanten, falls Sie es

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 

#Nombres para etiquetas login local y remoto 
MY_PORT_NUMBER_TITLE = "Cual es mi puerto?" 
OTHER_PORT_NUMBER_TITLE = "Cual es el puerto de contacto?" 
OTHER_IP_NUMBER_TITLE = "Cual es la direccion ip de contacto?" 
LOGIN_TITLE = "Acceder" 

#Nombres para las etiquetas del chat 
CONVERSATION_TITLE = "Conversacion" 
SEND_TITLE = "Responder" 

#Titulo de las ventans GUI 
LOGIN_WINDOW = "Login" 
CHAT_WINDOW = "Chat" 

#Modos de acceso al chat, local o remoto 
LOCAL = "Local" 
REMOTE = "Remote" 

#Mensajes de error 
WARNING = "¡Alerta!" 
MISSING_MESSAGE = "No hay ningun mensaje para enviar" 

#Localhost 
LOCALHOST = "localhost" 
DEFAULT_PORT = 5000 
LOCALHOST_CLIENT = "http://localhost:" 
+0

ich es in Client verwenden lösen self.proxy = xmlrpclib. ServerProxy (contact_ip + str (self.contact_port) + "/", allow_none = Wahr) dies auf dem Server: self.server = SimpleXMLRPCServer ((LOCALHOST, self.port), allow_none = True) –