0

私は Android アプリを作成していて、自分のパブリック IP を知る必要があります。私のアプリでは、XMPPサーバーとの会話にSmackライブラリを使用しています(IPを知るだけでなく必要でした)

サーバーから受信したバインド メッセージは次のようになります。

<iq id="_xmpp_bind1" type="result">
   <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
      <jid>user@jabber.example.com/Smack</jid>
   </bind>
</iq>

しかし、私はそれが次のようになるのを待っています:

<iq id="_xmpp_bind1" type="result">
    <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
       <jid>user@jabber.example.com/11.22.33.44:12345</jid
    </bind>
</iq>

11.22.33.44 の代わりに、私のパブリック IP にする必要があります。

4

2 に答える 2

1

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

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

于 2010-12-16T22:42:04.330 に答える
0

問題の原因がわかりました。私の Smack ライブラリ自体がサーバーにそのようなバインド応答を送信するように促します。

次のようなバインド要求を送信します。

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

したがって、リソースは Smack のバインド要求によって明示的に指定されます。メソッドを使用すると、その状況が発生します。

public void login (String username, String password)

このような動作を回避するには、次の方法を使用する必要があります。

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

resource設定する必要がありますnull

于 2010-12-17T12:41:45.490 に答える