0

私の設定ファイル:

Host server
User new_user
HostName 10.0.1.193
Port 55555
LocalForward 3000 10.0.1.193:6000
IdentityFile ~/.ssh/server

Client.py

import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:3000')
print s.pow(2,3)  # Returns 2**3 = 8
print s.add(2,3)  # Returns 5
print s.div(5,2)  # Returns 5//2 = 2

# Print list of available methods
print s.system.listMethods()

Server.py

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 6000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)

# Register a function under a different name
def adder_function(x,y):
    return x + y
server.register_function(adder_function, 'add')

# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
    def div(self, x, y):
        return x // y

server.register_instance(MyFuncs())

# Run the server's main loop
server.serve_forever()

server.pyは正常に実行されていますが、client.pyを実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "client.py", line 4, in <module>
    print s.pow(2,3)  # Returns 2**3 = 8
  File "/usr/lib/python2.7/xmlrpclib.py", line 1224, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1578, in __request
    verbose=self.__verbose
  File "/usr/lib/python2.7/xmlrpclib.py", line 1264, in request
    return self.single_request(host, handler, request_body, verbose)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1292, in single_request
    self.send_content(h, request_body)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1439, in send_content
    connection.endheaders(request_body)
  File "/usr/lib/python2.7/httplib.py", line 954, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 814, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 776, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 757, 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

動作している場合はsshを確認し、指定された構成でリモートサーバーにsshできることを確認しました。

ssh server

作品が見つかります。誰かが何がうまくいかないのか説明できますか?

4

1 に答える 1

0

サーバーは実行され、おそらく文句はありませんが、これは「正しく実行されている」という意味ではなく、より明確に言えば、サーバーがクライアントが期待する動作状態にあるという意味でもありません。

上記は、ある理由からやや不可解です: 未知の何かがうまくいかず、何が壊れているのかまだわからなくても、動作することがわかっているもののテストを開始し、それらが実際に動作していることを確認したい. これは、たとえエラーが意味のないものであっても、役に立つデバッグ スキルです。

この場合、クライアント エラー メッセージは「接続が拒否されました」であり、「[サーバーで]拒否されました」という意味です。

これを試してみてください: ターミナル/DOS ウィンドウの「クライアント」PC で、次のコマンドを実行します: telnet [your server ip] [your server port]

同じエラーが発生するはずです - 接続が拒否されました。サーバーが実際にポートを開いていない可能性があります。または、サーバーがポートを開いている可能性がありますが、サーバー上のファイアウォールが原因で、別のホストでそれをリモートで見ることができません。

また、同じホスト上でクライアント コードとサーバー コードの両方を実行すると、より多くの手がかりが得られることがあります (動作するはずですが、動作しない場合は、複数の問題がある可能性があります)。

于 2013-10-16T18:33:27.963 に答える