2010-12-16 13 views
0

私はAndroidアプリを作成しており、私のパブリックIPを知る必要があります。私のパブリックIPをXMPPバインドメッセージから取得するには?

<iq id="_xmpp_bind1" type="result"> 
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> 
     <jid>[email protected]/Smack</jid> 
    </bind> 
</iq> 

しかし、私はそれを待っている:私のアプリでは、私は

バインドメッセージは、のように見える、サーバから受信した(私のIPを知っているだけでなく、必要とされる)XMPPサーバとの会話のためのSmackライブラリを使用しています次のようになります。

<iq id="_xmpp_bind1" type="result"> 
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> 
     <jid>[email protected]/11.22.33.44:12345</jid 
    </bind> 
</iq> 

ここで、11.22.33.44の代わりに自分の公開IPを指定してください。

+2

に設定する必要があり、 この状況は、メソッドを使用する場合に発生されますあなたの質問は、実際には "どのようにバインド中に私にJIDリソースを割り当てるサーバーを取得させるのですか?また、ユーザーのIPアドレスをリソースとして割り当てるカスタムサーバーがあることには言及していません。 –

答えて

0

問題の原因が見つかりました。 My Smackライブラリ自体は、そのようなバインド応答を送信するためにサーバを起動します。

<iq id="Um486-7" type="set"> 
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"> 
     <resource>Smack</resource> 
    </bind> 
</iq> 

をので、リソースはスマックのバインド要求によって明示的に指定されています

このようなバインド要求を送信します。そのような行動を避けるために

public void login (String username, String password) 

次の方法を使用する必要があります:

public void login (String username, String password, String resource) 

resourceは以下のあなたの答えに基づいて、だから、null

+0

クライアントからの要求されたバインドパラメータを無視し、常にカスタムIP関連リソースを送信するようにサーバーを構成することもできます。 –

1

どのXMPPサーバーを使用していますか?

これは、提案している方法とは異なる方法で解決したいと思う可能性があります。あなたのアプローチはあなたの本当のIPアドレスをあなたの名簿の誰にでも漏らすでしょう。たとえば、http://ifconfig.me/へのHTTPリクエストは、余分な手間をかけずに外部IPアドレスを返します。

+0

私は自分のサーバーに接続しています。そして、名簿には実際の人が含まれていません。それは唯一のバディーを持っており、それはbotです:) IPアドレスの漏れは悪いことではありません。 – Alexander

+0

http://ifconfig.me/のようなサイド・サービスを使用するという点では合理的な判断ですが、ベストはありません。その場合、私のアプリはサイドサービスに依存します。そして、それは追加トラフィックを生成します(返されるページはそれほど重くはありませんが、無駄なデータがたくさんあります)。 – Alexander

関連する問題