Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Glaucos.

Pages: [1]
1
Réseau / [sf::Http] télécharger une image
« le: Août 03, 2012, 07:00:13 pm »
Bonjour,

en regardant les tutoriels j'ai trouvé la classe sf::Http très facile d'utilisation pour télécharger rapidement des pages webs. Cependant je n'arrive pas à télécharger du contenu comme des images par exemple. Pourtant le code ne devrait pas changer non ? Méthode GET, et url de l'image à télécharger ? Voici mon code:


    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <SFML/System.hpp>
    #include <SFML/Network.hpp>

    using namespace std;

    int main()
    {
        sf::Http http;
        http.SetHost("http://www.sfml-dev.org");

        sf::Http::Request Request;
        Request.SetMethod(sf::Http::Request::Get);
        Request.SetURI("/images/logo.jpg");

        sf::Http::Response Response = http.SendRequest(Request);

        std::string Body = Response.GetBody();

        cout << Body << endl;

        FILE *save = fopen("logo.jpg", "w");
        fprintf(save, "%s", Body.c_str());
        fclose(save);

        return 0;
    }
 

Merci de vos réponses : )

2
Réseau / Pas de réception de paquets sans configuration du routeur ?
« le: Juillet 18, 2012, 07:39:46 pm »
Bonjour,

je ne sais pas si cette question concerne plus la sfml ou le réseau en général: à quelles conditions le bind d'un port est OK ? Par exemple le bind peut renvoyer true sans que des donnés puissent être transmises (pare feu etc...). Par exemple dans une application ou j'utilise des sf::socketUDP la transmission de données depuis internet ne marche pas tant que je n'ai pas ouvert les ports sur mon routeur: mais alors comment faire pour les autres personnes utilisant l'application ?  :Faut-il qu'elles configurent toutes leur routeur ? :p Quand on installe une nouvelle appli utilisant le réseau l'autorisation des ports sur le pare feu suffit mais il ne faut pas en plus ouvrir les ports sur le routeur ... Pourtant dès que je ferme les ports sur ma livebox plus aucun paquet ne passe... Je m'y prends mal ?

Merci d'avance.

3
Réseau / sf::Socket::Error après quelques secondes de connexion
« le: Juillet 15, 2012, 11:43:04 am »
Bonjour,
j'ai fait un code de serveur simple utilisant le module réseau de la SFML:

#include "Serveur.h"

using namespace std;

Serveur::Serveur()
{
    log = fopen("log.txt", "w");

    fprintf(log, "Log Serveur\n************************\n\n");

    port = 4567;
    if(!socket.Bind(port))
    {
        cout << "Impossible d'ecouter le port !" << endl;
        fprintf(log, "Impossible d'écouter le port 4567\n");
    }

    ip = sf::IPAddress::GetLocalAddress();

    cout << "Votre adresse est: " << ip.ToString() << endl;

    nbreClients = 0;
    portclient = 0;

    cout << "Serveur pret !" << endl;

    fprintf(log, "Serveur prêt\n");
}

Serveur::~Serveur()
{
    fprintf(log, "Arrêt du serveur...\n");
    fclose(log);
    socket.Close();
}

std::string Serveur::getIP()
{
    return ip.ToString();
}

unsigned short Serveur::getPort()
{
    return port;
}

void Serveur::run()
{
    while(1)
    {
        switch(socket.Receive(p, sender, portclient))
        {
            case sf::Socket::Done:
            if(!clientConnecte(sender))
            {
                cout << "Nouveau client connecte: " << sender.ToString() << endl;
                fprintf(log, "Nouveau client connecte(%d): %s\n", nbreClients+1, sender.ToString().c_str());
                nbreClients = nbreClients + 1;
                clients[nbreClients-1] = sender;
            }

            broadcast(p);
            break;

            case sf::Socket::Disconnected:
            cout << "Client deconnecte: " << sender.ToString() << endl;
            break;

            case sf::Socket::Error:
            cout << "Erreur de " << sender <<  endl;
            break;

            default:
            break;
        }
        p.Clear();
    }
}

int Serveur::getClient(sf::IPAddress ipClient)
{
    int i;
    for(i = 0; i < nbreClients; i++)
    {
        if(clients[i] == ipClient)
        {
            return i;
        }
    }

    return -1;
}

bool Serveur::clientConnecte(sf::IPAddress client)
{
    int i;
    for(i = 0; i < nbreClients; i++)
    {
        if(clients[i] == client)
        {
            return true;
        }
    }

    return false;
}

void Serveur::broadcast(sf::Packet p)
{
    for(int i = 0; i < nbreClients; i++)
    {
        socket.Send(p, clients[i], 4568);
    }
}

bool Serveur::supprimerClient(int n)
{
    if(nbreClients < n+1)
    {
        return false;
    }

    else
    {
        clients[n] = clients[nbreClients-1];
        nbreClients--;
    }

    return true;
}
 

J'ai essayé de connecter deux machines du réseau local sur le serveur, tout  marche parfaitement pendant quelques temps et après environ une minute j'obtiens dans la console un message comme celui-ci:

Erreur de: 255.255.255.255
 

et plus aucun paquet n'est envoyé par le socket...
J'ai essayé  d'afficher le contenu de tous les paquets dans la console mais ils semblent tous "valides" donc je ne vois vraiment pas d'ou peut provenir cette erreur qui est pourtant systématique à chaque fois qu'il y a plus d'un client.
Lorsque seulement un client est connecté le socket ne renvoie pas d'erreur.

Quelqu'un peut il m'aider ?

4
Réseau / [Socket UDP] transmission d'informations
« le: Juillet 09, 2012, 12:21:20 am »

Salut !

Je suis sur un projet de mini FPS multijoueur online de la mort depuis quelques temps ^^ Et j'utilise SFML_Network pour gérer le réseau !
Cependant c'est le premier gros programme que j'essaye de faire avec des SocketUDP.
Et un problème persistant apparait: sur le réseau local, en lançant deux instances du jeu, je reçois des paquets fréquemment sur le serveur mais en testant depuis un pc distant j'en reçois moins d'un par minute...
Les deux PCs ayant une connexion pas trop mauvaise je me suis dit que c'était un problème d'algorithme réseau peut être...

En fait j'utilise un seul thread avec un socket en nonblocking pour envoyer des données au serveur. Il envoie un paquet avec la position du joueur à chaque tour de boucle.
J'aimerais bien passer par les threads mais comment faire pour partager des données comme la position d'un joueur sans passer tous les joueurs en global pour autant -_-" ?

Voilà c'est une question vraiment basique mais vu que je débute totalement en réseau toute réponse m'aidera beaucoup !

Merci d'avance !

Pages: [1]