Amis du soir, bonsoir !
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#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#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,