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

Langage C++ Discussion :

socket UDP sendTo


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Flutter/java/windev/php/javascript
    Inscrit en
    Octobre 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Flutter/java/windev/php/javascript
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 87
    Par défaut socket UDP sendTo
    bonjours, je cherche à utiliser une socket UDP en cpp et la lecture fonctionne très bien, en simple ou multicast par contre l’envoie de données ne fonctionne pas

    je communique avec un serveur en java (d’où le fait que je cache que le recv est bon ) qui est sensé être compatible. (en tout cas il l'est pour l'aller du message)

    voila ma fonction send:

    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
    bool    SocketUDP::sendTo(char* buff,int length){
        struct sockaddr_in si_other;
        int slen=sizeof(si_other);
     
        memset((char *) &si_other, 0, sizeof(si_other));
        si_other.sin_family = AF_INET;
        si_other.sin_port = htons(port);
        if (inet_aton(host.c_str(), &si_other.sin_addr)==0) {
            cout<<"Erreur d'addressage"<<endl;
            return false;
        }
        if (sendto(sockDesc, buff, length, 0, (const sockaddr*)&si_other, slen)==-1){
            cout<<"Erreur de sendTo"<<endl;
            return false;
        }
        return true;
    }
    elle ne me retourne aucune erreur et semble fonctionner mais rien ne passe sur le réseau...

    au préalable j'initialise ma socket comme suit:

    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
    bool    SocketUDP::init(){
        if((sockDesc = socket(AF_INET, SOCK_DGRAM, 0))<=0)
            return false;
     
        int opval = 1;
        if(setsockopt(sockDesc,SOL_SOCKET,SO_REUSEADDR,&opval,sizeof opval) < 0)
            return false;
        sockaddr_in localAddr;
        memset(&localAddr, 0, sizeof(localAddr));
        localAddr.sin_family = AF_INET;
        localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        localAddr.sin_port = htons(port);
     
        if (bind(sockDesc, (sockaddr *) &localAddr, sizeof(sockaddr_in)) < 0)
            return false;
        return true;
    }

    l'ip et le port sont bon (le serveur fonctionne parfaitement, il tourne actuellement avec des clients java).
    voila, si quelqu'un a une idée moi je suis complétement bloqué dessus

  2. #2
    Membre confirmé
    Homme Profil pro
    Flutter/java/windev/php/javascript
    Inscrit en
    Octobre 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Flutter/java/windev/php/javascript
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 87
    Par défaut
    j'ai trouvé le problème, le code est bon coté client, j'avais pas fait attention au fait que dans le code du client java ce c** avait remplacer l'ip par localhost...

    du coup si je tourne en local tout fonctionne, mais je n'arrive pas à créer ma socket sur le serveur sur une ip class D comme il faut pour le multicast.

    je fais comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    byte buff[];
            DatagramPacket paquet;
            while(!interrupted()){
                try{
                    buff = new byte[SIZE];
                    paquet = new DatagramPacket(buff, SIZE, InetAddress.getByName(ip), port);
                    System.out.println("Attente de message: "+paquet.getAddress().getHostAddress()+":"+socket.getLocalPort());
     
                    socket.receive(paquet);
    ...
    et la socket est declarée ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     socket = new DatagramSocket(port);
    j'ai essayé d'utiliser le constructeur prenant l'adresse en paramètre mais j'ai une Exception: java.net.BindException: Cannot assign requested address

    que se soit le client java ou cpp j'ai le même soucis, en localhost tout fonctionne, via le réseau...
    j'imagine que ça vient du fait que j'utilise une ip fantome? 230.0.0.1 alors que je suis sur un réseau de classe C

    vous en pensez quoi?

Discussions similaires

  1. [socket UDP] Codage BER : Format des Tag (TLG)
    Par Lolita59 dans le forum Réseau
    Réponses: 28
    Dernier message: 19/05/2006, 17h37
  2. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43
  3. [socket RAW] sendto ne marche pas !
    Par poporiding dans le forum C++
    Réponses: 4
    Dernier message: 18/01/2006, 13h14
  4. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  5. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19

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