foxprotech 2015-07-08 03:42 采纳率: 0%
浏览 1983

远端服务器xmlrpclib访问报错

在一台VPS上设立服务端:

 import argparse
import xmlrpclib
import threading

from SimpleXMLRPCServer import SimpleXMLRPCServer

# some trivial functions
def add(x,y):
    return x+y

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

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

def divide(x, y):
    return x/y


class ServerThread(threading.Thread):
    def __init__(self, server_addr):
        threading.Thread.__init__(self)
        self.server = SimpleXMLRPCServer(server_addr)
        self.server.register_multicall_functions()
        self.server.register_function(add, 'add')
        self.server.register_function(subtract, 'subtract')
        self.server.register_function(multiply, 'multiply')
        self.server.register_function(divide, 'divide')

    def run(self):
        self.server.serve_forever()

def run_server(host, port):
    # server code
    server_addr = (host, port)
    server = ServerThread(server_addr)
    server.start() # The server is now running
    print "Server thread started. Testing the server..."


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Multithreaded multicall XMLRPC Server/Proxy')
    parser.add_argument('--host', action="store", dest="host", default='localhost')
    parser.add_argument('--port', action="store", dest="port", default=8000, type=int)
    # parse arguments
    given_args = parser.parse_args()
    host, port =  given_args.host, given_args.port
    run_server(host, port)

并且打开iptables 上对应的TCP 8000端口:
         iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
         iptables -A OUTPUT -p tcp --sport 8000 -j ACCEPT

客户端代码如下:
    host='198.98.XXX.XXX'
        port=8000
    proxy = xmlrpclib.ServerProxy("http://%s:%s/" %(host, port))
    multicall = xmlrpclib.MultiCall(proxy)
    multicall.add(7,3)
    multicall.subtract(7,3)
    multicall.multiply(7,3)
    multicall.divide(7,3)
    result = multicall()
    print "7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d" % tuple(result)

报错代码如下:
    Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "/usr/lib/python2.7/xmlrpclib.py", line 998, in __call__
            return MultiCallIterator(self.__server.system.multicall(marshalled_list))
        File "/usr/lib/python2.7/xmlrpclib.py", line 1233, in __call__
            return self.__send(self.__name, args)
        File "/usr/lib/python2.7/xmlrpclib.py", line 1587, in __request
            verbose=self.__verbose
        File "/usr/lib/python2.7/xmlrpclib.py", line 1273, in request
            return self.single_request(host, handler, request_body, verbose)
        File "/usr/lib/python2.7/xmlrpclib.py", line 1301, in single_request
            self.send_content(h, request_body)
        File "/usr/lib/python2.7/xmlrpclib.py", line 1448, in send_content
            connection.endheaders(request_body)
        File "/usr/lib/python2.7/httplib.py", line 997, in endheaders
            self._send_output(message_body)
        File "/usr/lib/python2.7/httplib.py", line 850, in _send_output
            self.send(msg)
        File "/usr/lib/python2.7/httplib.py", line 812, in send
            self.connect()
        File "/usr/lib/python2.7/httplib.py", line 793, in connect
            self.timeout, self.source_address)
        File "/usr/lib/python2.7/socket.py", line 571, in create_connection
            raise err
    socket.error: [Errno 111] Connection refused
  • 写回答

3条回答 默认 最新

  • oyljerry 2015-07-08 04:17
    关注

    Connection refused
    你的网络请求被阻止了,防火墙等,或者你的网络不能连接VPS

    评论

报告相同问题?

悬赏问题

  • ¥15 优质github账号直接兑换rmb,感兴趣伙伴可以私信
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)