2009-06-11 14 views
2

私はクライアントのチェックIPのために少しSimpleXMLRPCServerを作成します。xmlrpclibを使用してclient_addressをすべてのメソッドに公開する方法

私はこれ試してみてください。

サーバー

輸入xmlrpclib

のSimpleXMLRPCServerインポートのSimpleXMLRPCServerから

サーバー=のSimpleXMLRPCServer(( "localhost" を、8000))

デフMYIP( ): return "あなたのIPアドレスは:%s"%server.socket.getpeername()

server.register_function(MYIP)

server.serve_forever()

クライアント

インポートxmlrpclib

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

印刷SE。 MyIp()

エラー

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

どのようにすべての機能にclient_address見えるように?

答えて

3

あなたはすべての関数の最初の引数としてclient_addressを渡すために、たとえばたい場合は、SimpleXMLRPCRequestHandlerをサブクラス(あなたがのSimpleXMLRPCServerをインスタンス化する際ハンドラとして、あなたのサブクラスを渡す)と_dispatchをオーバーライドすることができます(のparamsタプルにself.client_addressを付加して、委任する残りの部分はSimpleXMLRPCRequestHandler._dispatchです)。このアプローチがOKで、コードを見たい場合は、尋ねてください!

は、私はあなたが安全に、「目に見えるclient_addressを作る」ために関数の引数以外のものを使用したいかどうかはわかりません - 裸の名前など一切client_addressは、グローバル、ありませんか、そうでない場合は、単に要求の各インスタンスのself.client_addressがありますハンドラクラス(そして、グローバル変数へのコピーなどのハック)実際に yucky確かに - そしてスレッド下の安全ではないなど)。

+0

私は同じアプローチを使用しています。 SimpleXMLRPCRequestHandlerのサブクラスで、関数呼び出しのパラメータにclient_addressを追加します。 – Jiri

関連する問題