Serveur C++, client Java

Résolu
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007 - 30 nov. 2006 à 19:45
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007 - 4 déc. 2006 à 19:44
Bonjour,

Je suis en train de faire un client en java, et un serveur avec C++. J`ai pu initialiser les connexions via des sockets , et pour ca il y a pas de probleme. Le client java, il est capable d`envoyer des informations, et le serveur C++ envoye et recoit.
  Le probleme que j`ai c`est que quand le serveur C++ envoye des donnes vers le client Java, il n`arrive pas a a lire les informations en utilisant in.readLine(); ( le lecteur conventionnel). Il s`arrete la.

    A mon avis, ca doit etre un probleme a niveau des decallages des bits entre C++ et Java, mais j`arrive pas a trouver une solution qui me permette avoir une conversation aller-retour (serveur et client peuvent lire et recevoir des donnees). Apparentment, ce probleme ne peut etre resolu qu`apartir la modification du code serveur C++(actuellement,     send(csock,"123",3,0);, pour envoyer la chaine 1,2,3...)

Pourriez vous m`aider?

Merci d`avance,

Ignasi

9 réponses

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
4 déc. 2006 à 17:17
Essaie ceci en C

send(socket, "123\n\r", 5,0 ); a moins que ce soit send(socket, "123\r\n", 5,0); j'ai un blanc la pardon :S
Mais je peux presque te garantir que sa va fonctionner.

En faite c'est que Java ne lit la ligne que si et seulement si elle contient un retour de chariot Windows à la fin (caractère 13 suivit de 10). Donc si tu ajoute le retour de chariot par \n\r (ou l'inverse) sa va fonctionner.

http://vbaddons.free.fr
Cégep Lévis
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
30 nov. 2006 à 20:19
As tu essayé l'interface :
[file:///C:/j2sdk1.4.2_05/docs/api/java/io/InputStreamReader.html InputStreamReader], An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified [file:///C:/j2sdk1.4.2_05/docs/api/java/nio/charset/Charset.html
<code>charset
</code>].

OU

DataInput.ReadByte();
0
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007
30 nov. 2006 à 20:26
Celui que j`utilise avec Java, Client c`est :
 

in= new BufferedReader( new InputStreamReader (sock.getInputStream()));

Pour ce qui concerne le serveur C++, j`utilise le int rv=recv(csock,buffer,sizeof(buffer),0); pour recevoir, et send(csock,reponse,sizeof(reponse),0);  pour ecrire.

Pourrais tu m`expliquer comment je pourrais faire pour essayer ces interfaces-la? (genre, un exemple...)

Merci beaucoup d`avance,

Ignasi 
0
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007
30 nov. 2006 à 20:27
precision,

c`est le client java qui ne peut pas lire les donnes....savez vous comment les pre-traiter a partir du serveur pour que le client comprenne?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
30 nov. 2006 à 20:33
Le premier truc que je vois c'est que tu n'as pas besoin d'un BufferedReader.

Ensuite, en C++ tu envois un buffer de char mais Java ne comprend par défaut que UTF-8, donc il faut mettre le charset à ANSI CHAR (truc du genre)
0
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007
30 nov. 2006 à 20:37
comment peux je faire ca?

Ignasi
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
30 nov. 2006 à 20:51
Dans le constructeur de InputStreamReader(input, charset)
En fait, java utilise par defaut UTF-16 unicode
donc essayes "UTF-8" ou
<tt>"US-ASCII"</tt>

[file:///C:/j2sdk1.4.2_05/docs/api/java/io/InputStreamReader.html#InputStreamReader(java.io.InputStream, java.nio.charset.Charset) InputStreamReader]([file:///C:/j2sdk1.4.2_05/docs/api/java/io/InputStream.html InputStream] in, [file:///C:/j2sdk1.4.2_05/docs/api/java/nio/charset/Charset.html Charset] cs) 
Create an InputStreamReader that uses the given charset.
0
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007
30 nov. 2006 à 21:26
Merci beaucoup pour ton aide. Malheureusement, j`ai change la configuration charset de java, mais il ne marche pas encore.Il n`y aurait pas moyen de changer a travers du serveur C++?

Merci d`avance
0
ipascual Messages postés 28 Date d'inscription samedi 29 avril 2006 Statut Membre Dernière intervention 15 janvier 2007
4 déc. 2006 à 19:44
Bonjour,

En effet. Merci max12, c`etait le retour chariot. J`ai teste mon programme et il marche tres bien!! Merci encore!!

Just une petite precision...J`ai just utilise le retour chariot \n et apparentment il marche... : D (socket, "123\n", 5,0);
0
Rejoignez-nous