2

クライアントの IP をチェックするための小さな SimpleXMLRPCServer を作成します。

私はこれを試します:

サーバ

xmlrpclib をインポート

from SimpleXMLRPCServer import SimpleXMLRPCServer

サーバー = SimpleXMLRPCServer(("localhost", 8000))

def MyIp(): return "Your ip is: %s" % server.socket.getpeername()

server.register_function(MyIp)

server.serve_forever()

クライアント

xmlrpclib をインポート

se = xmlrpclib.Server(" http://localhost:8000 ")

print se.MyIp()

エラー

xmlrpclib.Fault: :(107, 'トランスポート エンドポイントが接続されていません')">

client_address をすべての関数から見えるようにするにはどうすればよいですか?

4

1 に答える 1

3

たとえば、最初の引数としてすべての関数に渡したい場合はclient_address、SimpleXMLRPCRequestHandler をサブクラス化し (SimpleXMLRPCServer をインスタンス化するときにサブクラスをハンドラーとして渡す)、オーバーライドします_dispatch( self.client_addressparams タプルの先頭に追加し、残りを にデリゲートしSimpleXMLRPCRequestHandler._dispatchます)。このアプローチで問題がなく、コードを確認したい場合は、質問してください。

client_address関数の引数以外を安全に使用して「可視化」する方法がわかりません-client_address名前がグローバルであろうとなかろうself.client_addressと、ベアネームとしてはなく、リクエストハンドラークラスの各インスタンスの .それをグローバル変数にコピーすることは、実際には本当に厄介です-スレッド化などでは安全ではありません)。

于 2009-06-11T01:15:31.323 に答える