簡體   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