Question

J'écris application Android et le besoin de connaître mon adresse IP publique. Dans mon application j'utilise la bibliothèque Smack pour la conversation avec le serveur XMPP (qui avait besoin non seulement connaître mon adresse IP)

Bind message, reçu des regards de serveur comme:

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

Mais je suis en attente, il ressemble à:

<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>

Si au lieu de 11.22.33.44 devrait être mon IP publique.

Était-ce utile?

La solution 2

J'ai trouvé la cause du problème. Ma bibliothèque Smack lui-même provoque serveur pour envoyer cette réponse de liaison.

Il envoie cette demande de liaison:

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

ressource est donc explicitement spécifié par la demande de liaison de Smack. Cette situation est survient lorsque vous utilisez la méthode:

public void login (String username, String password)

Pour éviter un tel comportement méthode suivante doit être utilisée:

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

et resource doit être réglé sur null

Autres conseils

Qu'est-ce que le serveur XMPP utilisez-vous?

Il est probable que vous voudriez résoudre ce une manière différente de celle que vous proposez. Votre approche fuirait votre adresse IP réelle à tout le monde sur votre liste. Par exemple, une requête HTTP à http://ifconfig.me/ retournera votre adresse IP externe sans tracas supplémentaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top