【问题标题】:Building a server and client with xmlrpc in python在 python 中使用 xmlrpc 构建服务器和客户端
【发布时间】:2016-08-17 00:21:48
【问题描述】:

我正在尝试在 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)

【问题讨论】:

    标签: python xmlrpclib


    【解决方案1】:

    这里是常量,以备不时之需

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

    【讨论】:

    • 我在客户端使用 self.proxy = xmlrpclib.ServerProxy(contact_ip+str(self.contact_port)+"/", allow_none=True) 在服务器中解决这个问题:self.server = SimpleXMLRPCServer( (LOCALHOST,self.port),allow_none=True)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多