You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python XML-RPC服务端客户端连接失败(WinError 10061)求助

解决XML-RPC服务端连接拒绝及代码错误问题

核心问题:服务端启动失败导致连接拒绝

你遇到的ConnectionRefusedError是因为服务端代码存在变量名错误,根本无法成功启动服务,客户端自然无法连接。以下是具体问题和修正方案:

Server.py 错误修正

原代码存在多处变量名不匹配、异常处理不完善等问题,修正后的代码如下:

import sys
import time
from xmlrpc.server import SimpleXMLRPCServer

# 处理启动参数,添加默认值
host_address = sys.argv[1] if len(sys.argv) > 1 else 'localhost'
host_port = int(sys.argv[2]) if len(sys.argv) > 2 else 8000

# 修正变量名错误,正确初始化服务端
server = SimpleXMLRPCServer((host_address, host_port), allow_none=True)

def add(x, y):
    return x + y

def sub(x, y):
    return x - y

def mult(x, y):
    return x * y

def div(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        # 除零异常返回明确提示,让客户端能收到有效反馈
        return f"Error: {x} divided by {y} is infinity (division by zero)"

def name():
    return host_address

def help():
    # 返回所有可用方法及说明,优化help功能
    methods = server.system_listMethods()
    help_text = "Available methods:\n"
    for method in methods:
        help_text += f"- {method}: {server.system_methodHelp(method)}\n"
    return help_text

def servertime():
    return time.strftime("%H:%M:%S")

# 注册所有方法,明确映射名称
server.register_function(add, 'add')
server.register_function(sub, 'sub')
server.register_function(mult, 'mult')
server.register_function(div, 'div')
server.register_function(name, 'name')
server.register_function(help, 'help')
server.register_function(servertime, 'servertime')

print(f"Server running on {host_address}:{host_port}...")
server.serve_forever()

关键修正点:

  • 变量名统一:原代码中host_address误写为hostAddress、host_port误写为port,导致启动时抛出NameError,服务直接崩溃。
  • 除零异常处理:原代码仅在服务端打印信息,客户端会收到None,修正为返回明确错误提示。
  • 默认参数支持:直接运行python Server.py即可绑定localhost:8000,也可通过参数指定地址端口。
  • help函数优化:返回所有方法的说明,更符合实际需求。

Client.py 错误修正

原代码存在参数类型错误、多余导入等问题,修正后的代码如下:

import xmlrpc.client
import sys

# 处理连接及计算参数,添加默认值
host_address = sys.argv[1] if len(sys.argv) > 1 else 'localhost'
host_port = sys.argv[2] if len(sys.argv) > 2 else '8000'
x = float(sys.argv[3]) if len(sys.argv) > 3 else 8.0
y = float(sys.argv[4]) if len(sys.argv) > 4 else 6.0

URI = f"http://{host_address}:{host_port}"
proxy = xmlrpc.client.ServerProxy(URI)

# 调用服务端方法,参数已转为数值类型
print(f"{x} + {y} is {proxy.add(x, y)}")
print(f"{x} - {y} is {proxy.sub(x, y)}")
print(f"{x} * {y} is {proxy.mult(x, y)}")
print(f"{x} / {y} is {proxy.div(x, y)}")
print(f"Server address: {proxy.name()}")
print(f"\n{proxy.help()}")
print(f"Server time: {proxy.servertime()}")

关键修正点:

  • 移除多余导入:客户端不需要SimpleXMLRPCServer,删除该无用导入。
  • 参数类型转换:原代码中x和y是字符串,直接传入会导致字符串拼接(如"8"+"6"="86"),修正为转为float类型。
  • 默认参数支持:直接运行python Client.py即可使用默认的x=8、y=6连接localhost:8000,也可通过参数自定义。

运行步骤

  1. 启动服务端:
    python Server.py
    
    或指定地址端口:
    python Server.py localhost 8000
    
  2. 启动客户端(另一个终端):
    python Client.py
    
    或自定义参数:
    python Client.py localhost 8000 8 6
    

内容的提问来源于stack exchange,提问作者Shane Beacham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:06:06