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