Frage

Ich schreibe Android App und Notwendigkeit, meine öffentliche IP zu kennen. In meiner app verwende ich Smack Bibliothek für ein Gespräch mit XMPP-Server (die nicht nur benötigt, um weiß, dass mein IP)

Bind-Nachricht vom Server empfangen aussieht wie:

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

Aber ich warte es aussieht:

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

Wo statt 11.22.33.44 sollte meine öffentliche IP sein.

War es hilfreich?

Lösung 2

fand ich die Ursache des Problems. Meine Smack Bibliothek selbst provoziert Server so binden Antwort zu senden.

Es sendet solche Bindungsanforderung:

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

So Ressource angegeben wird explizit von Smack der Bindungsanforderung. Diese Situation wird entsteht, wenn Methode:

public void login (String username, String password)

Um ein solches Verhalten zu vermeiden nächsten Methode verwendet werden soll:

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

und resource sollte null

gesetzt werden

Andere Tipps

Was XMPP-Server verwenden Sie?

Es ist wahrscheinlich, würden Sie dies eine andere Art und Weise als Sie vorschlagen zu lösen. Ihr Ansatz würde Ihre echte IP-Adresse zu jedem auf Ihrem Roster lecke. Zum Beispiel wird eine HTTP-Anfrage an http://ifconfig.me/ zurückkehrt Ihre externe IP-Adresse ohne zusätzlichen Aufwand.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top