好吧,这是一个我遇到问题的项目。我已经把代码写好了,但它遇到了问题。坦白地说,我甚至不确定我必须正确地使用这两个文件,所以如果有人能帮我判断出哪里出了问题,我会很高兴得到帮助的。这是说明/提示。
分布式计算应用程序中的
常见任务通常要求一台计算机能够在分布式系统中的另一台计算机上远程调用一个过程。本作业使用XML和Python进一步介绍了这一思想。
XML是一种用于调用过程(即方法或函数)的协议,由一台计算机(客户端)在另一台计算机(服务器)上调用。它的名称源于XML用于对过程调用进行编码的事实。用于将XML从客户机传输到服务器的方法是HTTP。虽然Python内置了对此功能的支持,但需要注意的是,支持并不局限于Python,而是扩展到了大多数高级语言for。这是设计中固有的,因为编码是通用的XML,传输是HTTP。
最后,有很多方法来实现这样的功能。对于Python,虽然超出了本课程的范围,但感兴趣的读者应该探索一些项目,如Pyro、RPyC和Fabric。
xmlrpc在Python中的实现可以在xmlrpc包中找到。在这个包中,所需的模块是xmlrpc.client和xmlrpc.server。
赋值
此任务要求您开发两个Python程序。一个是客户端,另一个是服务器。
服务器服务器服务器应该“注册”客户机能够调用的x过程。然后,它将绑定到地址“localhost”和端口8000。这是服务器将侦听请求的地址和端口。注意,如果您有绑定错误,您可以使用另一个端口,因为您的计算机可能有一个使用8000的应用程序。然而,大多数情况下,这是可行的。您的服务器调用必须以下列形式进行:
8000
要支持的这些过程如下: name --返回服务器调用帮助期间传递到命令行的服务器名称--返回服务器支持服务器时间的过程列表--以24小时格式返回服务器上的当前时间。I. 13:00:01 add(x,y) -返回x和y sub(x,y) -返回x-y mult(x,y) -返回x*y div(x,y) -返回x/y (确保处理0的除数)
client 客户机使用服务器地址和服务器侦听的端口连接到服务器(参见上文)。然后,它将分别使用值x和y的值8和6来执行每个受支持的过程。客户端调用必须以下列形式进行:
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是无限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, num2, proxy.sub(num1, num2)))
print('{} * {} is {}'.format(num1, num2, proxy.mul(num1, num2)))
print('{} / {} is {}'.format(num1, num2, proxy.div(num1, num2)))
print(proxy.name())
print(proxy.help())
print(proxy.serverTime())如果能在这方面提供任何协助,将不胜感激。
发布于 2020-11-24 01:52:43
在您的server.py和client.py中都有许多bug。我重写了错误更正的文件。
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, num2, proxy.subtraction(num1, num2)))
print('{} * {} is {}'.format(num1, num2, proxy.multiplication(num1, num2)))
print('{} / {} is {}'.format(num1, num2, proxy.division(num1, num2)))
print(proxy.name())
print(proxy.helpMe())
print(proxy.serverTime())祝好运
https://stackoverflow.com/questions/64031380
复制相似问题