问题描述
好的,这是一个我遇到问题的项目。我已经编写了代码,但是遇到了问题。坦白说,我什至不确定我是否正确连接了两个我必须正确使用的文件,因此,如果有人可以帮忙,并帮助我确定问题出在哪里,我会很高兴为您提供帮助。这是说明/提示。
分布式计算应用程序中的常见任务通常需要 一台计算机能够远程调用过程的能力 分布式系统中的另一台计算机。此作业介绍 进一步使用XML-RPC和Python来实现这个想法。
XML-RPC是用于调用过程的协议(即方法或 一台计算机(客户端)在另一台计算机(服务器)上的功能)。它的 名称是由于XML用于编码过程调用而产生的。 用于将XML从客户端传输到服务器的方法是 HTTP。尽管Python内置了对此功能的支持,但它确实是 需要注意的重要一点是,支持不仅限于Python,还扩展到 大多数高级语言添加。这是设计中固有的,因为 编码是通用XML,传输是HTTP。
最后,有很多方法可以实现这种功能。对于 Python,虽然不在本课程范围之内,但有兴趣的读者 应该探索Pyro,RPyC和Fabric等项目。
XML-RPC在Python中的实现可在xmlrpc软件包中找到。在 该软件包,所需的模块是xmlrpc.client和 xmlrpc.server。
分配
此作业需要您开发两个Python程序。一个是 客户端,另一个是服务器。
服务器 服务器应“注册” x客户端将要执行的过程 可以打电话。然后它将绑定到地址“ localhost”和端口 8000。这是服务器将侦听请求的地址和端口。请注意,如果您遇到绑定错误,则可以使用其他 端口,因为您的计算机可能具有正在使用8000的应用程序。 但是,这有时会起作用。您的服务器调用必须是 格式如下:
python server.py localhost 8000
这些受支持的过程如下:name-返回 服务器期间在命令行上传递的服务器名称 调用帮助–返回服务器要执行的过程的列表 支持servertime –返回服务器上的当前时间(24) 小时格式。即13:00:01 add(x,y)–返回x和y的总和 sub(x,y)–返回x – y mult(x,y)–返回x * y div(x,y)–返回 x / y(请务必处理被0除的情况)
客户 客户端将使用服务器的 服务器正在监听的地址和端口(请参见上文)。它 然后将使用值8执行每个受支持的过程 和6分别代表值x和y。您的客户调用必须 格式如下:
python client.py host_address host_port 8 6
其中host_address和host_port是地址和端口 服务器正在监听。如果您使用一台计算机作为服务器 而客户端计算机仅使用“ localhost”作为地址和端口 上面用过。 8和6是x和y的值。
客户端的示例输出:
8 * 6是48.0 8/6是1.3333333333333333 8 + 6是14.0 8-6是2.0 8 / 0是Infinity 13:50:22
我将提供两个文件的代码,以便有人可以提供帮助。发生问题的Server.py文件比Client.py文件更多,但是无论如何我都将发布它们。
Server.py
import sys
import time
from xmlrpc.server import SimpleXMLRPCServer
argumentList = sys.argv
hostAddress = argumentList[1]
port = argumentList[2]
server = SimpleXMLRPCServer((hostAddress,int(port)))
def addition(x,y):
return x + y
def subtraction(x,y):
return x - y
def multiplication(x,y):
return x * y
def division(x,y):
try:
return x / y
except ZeroDivisionError:
return "To Infinity and Beyond! Whee!"
def name():
return hostAddress
def helpMe():
return server.systemListMethods()
def serverTime():
return time.strftime("%H:%M:%s")
server.register_function(helpMe)
server.register_function(addition)
server.register_function(serverTime)
server.register_function(subtraction)
server.register_function(multiplication)
server.register_function(division)
server.serve_forever()
错误/警告屏幕截图
Client.py
import xmlrpc.client
import sys
argumentsList = sys.argv
hostAddress = argumentsList[1]
hostPort = argumentsList[2]
URI = "http://" + hostAddress + ":" + hostPort
num1 = int(argumentsList[3])
num2 = int(argumentsList[4])
proxy = xmlrpc.client.ServerProxy(URI)
print('{} + {} is {}'.format(num1,num2,proxy.add(num1,num2)))
print('{} - {} is {}'.format(num1,proxy.sub(num1,num2)))
print('{} * {} is {}'.format(num1,proxy.mul(num1,num2)))
print('{} / {} is {}'.format(num1,proxy.div(num1,num2)))
print(proxy.name())
print(proxy.help())
print(proxy.serverTime())
在此方面提供的任何帮助将不胜感激。
解决方法
server.py和client.py中都存在许多错误。我重写了文件,并纠正了错误。
server.py:
import sys
import time
from xmlrpc.server import SimpleXMLRPCServer
argumentList = sys.argv
hostAddress = '0.0.0.0'
port = '12345'
server = SimpleXMLRPCServer((hostAddress,int(port)))
def addition(x,y):
return x + y
def subtraction(x,y):
return x - y
def multiplication(x,y):
return x * y
def division(x,y):
try:
return x / y
except ZeroDivisionError:
return "To Infinity and Beyond! Whee!"
def name():
return hostAddress
def helpMe():
return server.system_listMethods()
def serverTime():
return time.strftime("%H:%M:%S")
server.register_function(name)
server.register_function(helpMe)
server.register_function(addition)
server.register_function(serverTime)
server.register_function(subtraction)
server.register_function(multiplication)
server.register_function(division)
server.serve_forever()
client.py
import xmlrpc.client
import sys
argumentsList = sys.argv
hostAddress = '127.0.0.1'
hostPort = '12345'
URI = "http://" + hostAddress + ":" + hostPort
num1 = int('7')
num2 = int('5')
proxy = xmlrpc.client.ServerProxy(URI)
print('{} + {} is {}'.format(num1,num2,proxy.addition(num1,num2)))
print('{} - {} is {}'.format(num1,proxy.subtraction(num1,num2)))
print('{} * {} is {}'.format(num1,proxy.multiplication(num1,num2)))
print('{} / {} is {}'.format(num1,proxy.division(num1,num2)))
print(proxy.name())
print(proxy.helpMe())
print(proxy.serverTime())
祝你好运