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 :

[SFML][RESEAU] Impossible d'envoyer un paquet


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut [SFML][RESEAU] Impossible d'envoyer un paquet
    Bonjour à tous,

    Je viens vous demander de l'aide pour tenter de me débloquer sur un problème dont je ne vois pas l'origine.

    Concrètement, je ne comprend pas pourquoi mon programme arrive à lancer et recevoir un premier paquet mais ensuite il refuse catégoriquement d'en envoyer d'autres...

    Voici donc mon programme en 2 parties :

    Connection.h

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    #include <SFML/Graphics.hpp>
    #include <SFML\Network.hpp>
    #include <iostream>
    #include <sstream>
     
    sf::TcpSocket socket;
    sf::IpAddress ip = sf::IpAddress::getPublicAddress();
    sf::TcpListener listenner;
     
    sf::Packet packet;
     
    sf::Http http("---ADRESSE DE MON SERVEUR---");
    sf::Http::Request request;
    sf::Http::Response response;
    std::ostringstream stream;
    sf::Socket::Status status;
     
    char choix, mode = 'n';
    char buf[2000];
    std::string text,textRep;
    std::string repServ, ligne;
     
    void connection(){
     
        request.setMethod(sf::Http::Request::Post);
     
        std::cout << "Votre ip : " << ip << std::endl;
     
        std::cout << "Etre le Serveur : s | Etre le Client : c" << std::endl;
        std::cin >> choix;
     
        if (choix == 'c'){
     
            mode = 's';
     
            std::cout << "Vous etes un Client" << std::endl;
     
            std::cout << "CONNEXION EN COURS..." << std::endl;
     
            request.setUri("/index.php");
            response = http.sendRequest(request);
     
            repServ = response.getBody();
            std::istringstream lin(repServ);
     
            std::cout << "RECHERCHE DE SERVEUR EN COURS..." << std::endl;
     
            std::getline(lin, ligne);
            status = socket.connect(ligne, 2000);
     
            while (status != sf::Socket::Done){
     
                std::getline(lin, ligne);
                if (ligne == ""){
                    std::cout << "Aucun serveur disponible" << std::endl;
                    break;
                }
     
     
                status = socket.connect(ligne, 2000);
     
            }
     
            text = "Connection avec le client reussi !";
            packet << text;
     
        }
        else if (choix == 's'){
     
            mode = 'r';
     
            std::cout << "Vous etes le serveur" << std::endl;
     
            request.setUri("/addServ.php");
     
            stream << "ip=" << ip;
            request.setBody(stream.str());
            response = http.sendRequest(request);
            std::cout << "RECHERCHE D'UN CLIENT EN COURS..." << std::endl;
            listenner.listen(2000);
            listenner.accept(socket);
            std::cout << "SOCKET ACCEPTE" << std::endl;
     
            text = "CECI EST ENVOYE DEPUIS LE SERVEUR";
            packet << text;
        }
        else{ 
            std::cout << "OKTAMER" << std::endl;
     
        }
     
    }
     
    void decoBdd(std::string ipp){
     
        request.setUri("/delServ.php");
        response = http.sendRequest(request);
     
    }

    Source.cpp


    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    #include <SFML/Graphics.hpp>
    #include <SFML\Network.hpp>
    #include <iostream>
    #include <sstream>
    #include <string>
    #include "TileMap.h"
    #include "Connection.h"
     
    //sf::RenderWindow window(sf::VideoMode(800, 600), "Test MAP !");
     
    //TileMap map;
     
    int main()
    {
     
        /*const int maap[] = 
        {
            154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
            154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
            154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
            160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
            170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
            154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
            154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154
        };
     
        map.load("tiles.png", sf::Vector2u(32, 32), maap, 22, 7);
     
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
     
            window.clear();
            window.draw(map);
            window.display();
        }*/
     
        connection();
     
        socket.send(packet);
        socket.receive(packet);
        packet >> textRep;
        std::cout << textRep << std::endl;
     
        std::cin.ignore();
     
        decoBdd(ligne);
     
        std::cout << "--<§> TCHAT TEST <§>--" << std::endl;
        std::cout << "Envoyer '-1' pour quitter le Tchat" << std::endl;
     
        while (text != "-1"){
     
            text="";
            textRep="";
            sf::Packet packet2;
     
            if (mode == 's'){
     
                std::cout << "VOTRE TEXT : " << std::endl;
                std::getline(std::cin, text);
     
                packet2 << text;
     
                    if (socket.send(packet2)){
                        mode = 'r';
                    }
                    else{ std::cout << "ERREUR DANS L'envoie" << std::endl; }
     
            }
            else if (mode == 'r'){
     
                socket.receive(packet2);
                std::cout << "A" << std::endl;
     
                if (packet2 >> textRep){
     
                    std::cout << "B" << std::endl;
                    std::cout << textRep << std::endl;
                    std::cout << "C" << std::endl;
                    mode = 's';
     
                }
                else{ std::cout << "ERREUR DANS LA RECEPTION" << std::endl; }
     
            }
            else{
                return 0;
            }
     
            std::cout << "---------------" << std::endl;        
     
        }
     
        std::cout << "CONNEXION TERMINEE" << std::endl;
     
        system("pause");
     
        return 0;
    }

    Merci infiniment d'avance !

    Cdlm,

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    J'ai oublié de vous donner les détails de l'erreur...

    Le programme bloque à la ligne 70 -73 du Source.cpp puisque if (socket.send(packet2)) return false...


    Donc pour une raison inconnue, le packet n'est pas envoyé.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    La doc dit que ça échoue si le socket n'est pas connecté.
    Tu es sûr que ton connect réussit ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    Oui, le socket est bien connecté.
    J'ai partiellement trouvé le problème car je me suis trompé dans la condition, il faut utiliser if (socket.send(packet2) == sf::Socket::Done) ).
    Cependant maintenant impossible de récupérer le packet... J'obtiens des magnifiques : "ERREUR DANS LA RECEPTION".

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Question peut-être conne mais et-tu certain que ton serveur envoi un packet ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    Oui car le client reçoit bien le premier le packet et l'affiche.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/09/2014, 22h41
  2. Réponses: 5
    Dernier message: 05/06/2008, 22h43
  3. [Mail] Impossible d'envoyer un mail
    Par bugalood dans le forum Langage
    Réponses: 4
    Dernier message: 17/09/2005, 02h38
  4. Impossible de supprimer un paquet
    Par aliasjcdenton dans le forum Debian
    Réponses: 4
    Dernier message: 14/02/2005, 16h28
  5. Réponses: 33
    Dernier message: 30/03/2004, 16h09

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