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

C++ Discussion :

[Socket] Communication Java <--> C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut [Socket] Communication Java <--> C++
    Bonjour,

    Je souhaite faire communiquer deux programmes avec des sockets, l'un en Java, l'autre en C++.

    Mon programme Java fait office de serveur et celui en C++ de client.
    Côté Java je n'ai pas de soucis (j'ai déjà testé de faire ma communication avec deux programmes Java et ça marche nickel)

    Par contre je n'obtiens pas du tout ce que je veux avec un client c++ (je dois forcément foirer un truc un moment), sur ma console, j'ai un caractère bizarre qui s'affiche (la fraction 1/4 suivi d'un Y majuscule avec un accent) et ce, peu importe ce que j'envoie (un int, un string, ...)
    Ci-dessous mon code C++, je peux vous donner le code Java si vous le souhaitez

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #include <iostream>
    #include <winsock2.h>
    #include <stdio.h>
    #pragma comment(lib, "ws2_32.lib")
     
    using namespace std;
     
    int main()
    {
        WSADATA WSAData;
        WSAStartup(MAKEWORD(2,0), &WSAData);
        SOCKET sock;
        SOCKADDR_IN sin;
        char buffer[32];
     
        sin.sin_addr.s_addr	= inet_addr("127.0.0.1");
        sin.sin_family		= AF_INET;
        sin.sin_port		= htons(13370);
        sock = socket(AF_INET,SOCK_STREAM,0);
     
        if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR)
        {
            cout<<"connexion"<<endl;
            if(recv(sock, buffer, 32, 0) != SOCKET_ERROR)
            {
                cout<<"reception : "<<buffer<<endl;
                printf("%s", buffer);
            }
            else
                cout<<"fail reception";
        }
        else
            cout << "fail connexion";
        closesocket(sock);
        WSACleanup();
        return 0;
    }
    Merci d'avance

    pikmin

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Utilise tu les même propriétés de socket entre le client et le serveur?

    Qu'essaie-tu d'envoyer avec ton programme java?
    que dois contenir le message? Il faut savoir ce que tu envois et dans quel format pour ensuite savoir comment tu dois le lire.

    Si tu as des erreurs coté C++ tu peux utiliser
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    pour avoir une raison plus précise.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Utilise tu les même propriétés de socket entre le client et le serveur?
    c'est-à-dire exactement ?

    Citation Envoyé par jabbounet Voir le message
    Qu'essaie-tu d'envoyer avec ton programme java?
    que dois contenir le message? Il faut savoir ce que tu envois et dans quel format pour ensuite savoir comment tu dois le lire.
    un entier ou une chaine de caractères
    j'utilise un DataOutputStream pour l'envoi avec la fonction writeInt pour les int, et j'ai essayé writeChars, writeBytes et writeUTF pour une chaine de caractères.

    Citation Envoyé par jabbounet Voir le message
    Si tu as des erreurs coté C++ tu peux utiliser
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    pour avoir une raison plus précise.
    c'est bien ça le problème, je n'ai pas d'erreur la condition de la fonction recv est respectée.

    Pour info, voici mon code Java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ServerSocket service= new ServerSocket(13770); 
    Socket connexion = service.accept(); 
    boolean continu=true;
    DataOutputStream dos = new DataOutputStream(connexion.getOutputStream());
    while(continu)
    {
                dos.writeInt(5);
                dos.write
                dos.flush();
                dos.close();
    }
    connexion.close();

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 39
    Par défaut
    j'viens de voir que si je rajoute cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    mon programme est en attente de réception d'information (il passe à la ligne 24 en affichant "connexion" et après plus rien)

    mais bon ça m'avance pas trop vu que la connexion semble bel et bien être réalisée

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Il me semble que le data outputstream sérialise les données dans un format interne à Java, qui est fait pour être désérialisé par un DataInputStream...donc ton client c++ en perd son latin parce que la STL n'a jamais entendu parler de ce protocole...il faudrait plutôt que tu utilise un protocole standard et identique des deux côtés plutôt que les streams de sérialisation faits pour communiquer de java à java...

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    *Si mes souvenirs sont bons*, il me semble que les chaines de caractères sont d'offices codées en unicode ou similaires en java...

    Du coup, certains caractères sont en réalité codé sur deux bytes ou plus. Si tu essaye de les récupérer avec un char * ou (ce serait quand meme mieux ) avec une std::string, qui travaille avec des caractères codés sur un byte, tu auras fatalement des problèmes

    Le problème de la gestion unicode a souvent été abordé ici, une petite recherche devrait te permettre de trouver comment te dépêtrer
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Communication Java - Silverlight via Socket
    Par Seb59118 dans le forum Silverlight
    Réponses: 4
    Dernier message: 02/12/2009, 17h53
  2. La communication par socket en Java
    Par akreem dans le forum NetBeans
    Réponses: 1
    Dernier message: 27/10/2009, 10h41
  3. [socket] Communication bloquante
    Par Tex-Twil dans le forum Développement
    Réponses: 3
    Dernier message: 29/03/2006, 16h33
  4. Communication JAVA & PL/SQL
    Par Titouf dans le forum PL/SQL
    Réponses: 1
    Dernier message: 12/01/2006, 10h18
  5. [Socket] Communication à l'aide de sockets (théorie)
    Par nicolas.pied dans le forum C++
    Réponses: 1
    Dernier message: 29/11/2005, 17h33

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