IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Client Java / Serveur C


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut Client Java / Serveur C
    Bonjour,

    j'ai crée un serveur en c qui est censé simuler un système embarqué.

    Des clients Java doivent pouvoir se connecter au serveur c. La connection fonctionne et le premier message envoyé du serveur c vers les clients java fonctionne. Cependant, les messages suivants n'arrivent pas. A mon avis il s'agit d'un problème de buffer. Voici comment je lis depuis mon client java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    BufferedReader plec = new BufferedReader(new InputStreamReader(socket.getInputStream()));
     
    boolean continu = true ;
    while(continu)
    {			
    	String buffer ;
     
    	if ((buffer=plec.readLine()).equals("FIN")==true)
    	continu = false ;	
     
    	//CONNECTION MESSAGE
    	if(buffer.equals("CON")==true)
    	{	
    		System.out.println("Connection avec le systeme embarque reussie") ;						
    	}
    	System.out.println(buffer) ;
     
     
    }
    Si vous vous pouviez m'éclairer ça serait cool.

    Bonne journée

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    j'ai bien regardé du coté du serveur C ...
    et apparamment tout est fait correctement. je fais un gets(buffer), je l'affiche sur la sortie standard, elle s'affiche correctement puis l'envoie s fait également correctement.

    du coté Java ... je fais un read(chaine,0,10) et les messages reçu contiennent bien la bonne chaine mais elle est suivie de caractères chelou ...

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    tu veut dire quoi par "caractères chelou"?

  4. #4
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Même question ...
    Et puis ton code, on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (((a==b)==true)==true) {
    ...
    }
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (a==b){
    ...
    }
    suffit ....

    Donc ton code se résume à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    boolean continu = true ;
    while(continu)
    {			
    	String buffer ;
     
    	continu = !((buffer=plec.readLine()).equals("FIN");	
     
    	//CONNECTION MESSAGE
    	if(buffer.equals("CON"))
    	{	
    		System.out.println("Connection avec le systeme embarque reussie") ;						
    	}
    	System.out.println(buffer) ;
     
     
    }

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Tu as vérifié ton encodage? UTF-8, ISO-quelquechose, etc...?

    Côté serveur, côté client, et lors du transfert
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    je crois que ton erreur vient de la taille du String buffer. tu doit l'initialiser à null ou à "".

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par mehdiing
    je crois que ton erreur vient de la taille du String buffer. tu doit l'initialiser à null ou à "".
    Non c'est inutile puisqu'il est initialisé par le readLine(). De toute manière il est impossible d'avoir une variable "non-initialisé" en Java...


    Par contre cela ressemble un peu à un buffer-overflow en C...
    Comment tu envois les données du serveur C vers le client Java ???

    a++

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    je fais comme celà du coté serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(1)
    {
    	char buf[50] ;
    	gets(buf) ;
     
     
    	if(sendto(csock, buf, sizeof(buf),0,(SOCKADDR *) &clientSin, &sinsize)==-1)
    	printf("erreur send\n") ;
    	printf("%s\n", buf) ;		
    }
    comment je peux verifier mon codage ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    par contre j'ai oublié de préciser que je bosse dans un thread ... ma classe étend la classe Thread

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    sizeof(buf) renvoi la taille du tableau (soit 50) et non pas la taille de son contenu (3 pour "CON"). Bref tu écris 47 caractères en trop, et comme ton tableau n'a pas été mis à zéro tu obtiens des caractères aléatoires...

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    if(sendto(csock, buf, strlen(buf),0,(SOCKADDR *) &clientSin, &sinsize)==-1)

    a++

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    et bien j'ai encore un petit souci ...

    lorsque j'envoi des chaine du serveur c vers le client java ... le client ne les reçoit pas complètement, il manque la dernière lettre

    serveur.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while(1)
    {
    	char buf[50] ;
    	gets(buf) ;
    	buf[strlen(buf)-1]='\n' ;
     
    	if(sendto(csock, buf, strlen(buf),0,(SOCKADDR *) &clientSin, &sinsize)==-1)
    	printf("erreur send\n") ;
    	printf("%s", buf) ;
     
    }
    client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    boolean continu = true ;
    while(continu)
    {			
    	String buffer ;
     
    	continu = !((buffer=plec.readLine()).equals("FIN"));	
     
    	//CONNECTION MESSAGE
    	if(buffer.equals("CON"))
    	{	
    		System.out.println("Connection avec le systeme embarque reussie") ;						
    	}
    	System.out.println(buffer) ;
     
     
    }

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    bien entendu je devrais faire buf[strlen(buf)]='\n' mais dans ce cas lorsque j'affiche la chaine du coté serveur la chaine s'affiche mais avec encore des caractères aléatoires ...

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par innosang
    bien entendu je devrais faire buf[strlen(buf)]='\n' mais dans ce cas lorsque j'affiche la chaine du coté serveur la chaine s'affiche mais avec encore des caractères aléatoires ...
    Ton buffer doit se terminer par un '\0' pour finir la chaine de caractères...

    C'est une notion basique des chaines en C...

    a++

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    oé biensur mais le gets le fait déjà ...

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut
    c'est bon tout marche à peu près ... j'ai utilisé fgets au lieu de gets

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication XML-RPC client java serveur PHP
    Par solika dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 04/04/2012, 08h50
  2. Client Java / serveur en C
    Par NasriOmar dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 29/01/2012, 15h04
  3. [Socket/SSL] Client Java / Serveur C. Compabilité ?
    Par PaloPalo dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 20/12/2011, 12h59
  4. Client Java Serveur ASP.NET C#
    Par azerty_123 dans le forum Services Web
    Réponses: 0
    Dernier message: 23/06/2009, 01h39
  5. [Java] Communication entre client et serveur
    Par danje dans le forum CORBA
    Réponses: 1
    Dernier message: 14/12/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo