繁体   English   中英

在python中使用xmlrpc构建服务器和客户端

[英]Building a server and client with xmlrpc in python

我正在尝试在python中使用xmlrpc构建客户端和服务器,我必须使用名为FunctionWrapper的类,该类具有一个方法,客户端使用它,该方法的名称为sendMessage_wrapper(self,message),并声明了服务器在另一个类中,我试图在服务器中注册该方法,但是当我从客户端调用该方法时,我提出并出错了,请您能帮我吗?

客户:

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

这是常量,以备不时之需

#! /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:"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM