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,