J'essaye d'écrire un client xmpp pour envoyer/recevoir des messages de gtalk. Avant de commencer l'implémentation, j'ai pensé à développer un prototype pour voir si je pouvais passer un message à gtalk.Implémentation d'un client xmpp dans java - coincé dans la première étape
J'ai écrit le code suivant et suis maintenant coincé dans la partie où je suis supposé demander google avant de commencer une connexion cryptée.
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class XmppConnect {
static String initiate_conn="<?xml version=\"1.0\"?>\n\r<stream:stream to=\"google.com\"\n\rversion=\"1.0\"\n\rxmlns=\"jabber:client\"\n\rxmlns:stream=\"http://etherx.jabber.org/streams\">\n";
static String start_tls="<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
public static void main(String [] args)
{
try {
Socket connection = new Socket("talk.google.com", 5222);
DataInputStream input = new DataInputStream(connection.getInputStream());
BufferedReader d = new BufferedReader(new InputStreamReader(input));
OutputStream to_server = null;
String responseLine;
to_server = connection.getOutputStream();
to_server.write(initiate_conn.getBytes());
responseLine = d.readLine();
System.out.println("Server: " + responseLine);
to_server.write(start_tls.getBytes());
responseLine = d.readLine();
System.out.println("Server: " + responseLine);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Je suis en mesure d'envoyer les documents suivants à Google
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
et en réponse je me attends à ce qui suit
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
Mais je ne reçois rien à partir du serveur.
La capture d'écran de wireshark est comme ci-joint.
Demandez votre aide et s'il vous plaît ne me dites pas d'utiliser les bibliothèques xmpp déjà existantes parce que je ne veux pas.
Cordialement, Manu!
Mise à jour
ont trouvé la solution. Le code de travail est comme ci-dessous:
Le code qui fonctionne pour l'instant est comme ci-dessous.
Maintenant, je vais travailler sur la mise en œuvre TLS et de revenir ici Encas de doute :) :)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class XmppConnect {
static String initiate_conn="<stream:stream to=\"gmail.com\" version=\"1.0\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\">";
static String start_tls="<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
public static void main(String [] args)
{
try {
Socket connection = new Socket("talk.google.com", 5222);
DataInputStream input = new DataInputStream(connection.getInputStream());
BufferedReader d = new BufferedReader(new InputStreamReader(input,"UTF-8"));
BufferedWriter to_server = new BufferedWriter(
new OutputStreamWriter(connection.getOutputStream(),"UTF-8")
);
String responseLine="";
to_server.write(initiate_conn);
to_server.flush();
int in;
while(!(responseLine.contains("</stream:features>")))
{
responseLine += (char)d.read();
}
System.out.println("Server: " + responseLine);
to_server.write(start_tls);
to_server.flush();
responseLine="";
while(!(responseLine.contains("<proceed xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>")))
responseLine += (char)d.read();
System.out.println("Server: " + responseLine);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Je suis en train de coder ma propre bibliothèque donc je ne peux pas utiliser ce que vous avez suggéré, mais je vais certainement me référer à elle quand elle est bloquée. Merci – Manav