Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: N'envoie que au dernier client qui l'a contacté.  (Lu 2662 fois)

0 Membres et 1 Invité sur ce sujet

MasterPlow

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
N'envoie que au dernier client qui l'a contacté.
« le: Janvier 24, 2017, 10:27:25 pm »
Bonjour / bonsoir
J'ai un peu de soucis d'envoie de message [serveur => clients].

J'ai donc une liste de client (mapList[numMapp]) qui contient plusieurs adresses IP de client et lorsque qu'il reçoit l'info, il doit la transmettre à tout le monde sauf à même client du coup voilà la partie du code qui gère l'envoie :
for(int i = 0; i < mapList[numMapp].size(); i++)
    {
        if(mapList[numMapp][i].getPseudo() != pseudo)
        {
            std::string ip = mapList[numMapp][i].getIP();
            sf::IpAddress recipient = ip; // addresse du receveur
 
            {
                sf::Packet packet;  // déclaration du packet
                std::string msg = msgrecev;
                packet << msg;
                socket.send(packet, recipient, port);
            }
        }
    }
 

Mais ce message n'est envoyé que à la dernière personne qui a contacté le serveur...

En espérant trouver une solution...

Merci d'avance !

PS: tout le reste du programme fonctionne, c'est vraiment à ce niveau ci de mon progamme qu'il ne veut pas "changer" de "cible"...

janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
Re : N'envoie que au dernier client qui l'a contacté.
« Réponse #1 le: Février 03, 2017, 01:15:15 pm »
As-tu résolu le problème depuis ?

Si je comprends bien, tu utilises un socket UDP c'est bien ça ?
Je n'ai pas l'habitude de les utiliser mais regarde dans la doc quels codes de renvoi tu peux récupérer sur la fonction send(), rien ne garantit qu'un packet UDP arrive dans le bon ordre ou arrive tout court.

Peut-être que ta boucle fait que les packets sont bien envoyés mais pas reçus du côté des clients. Si tu veux envoyer des messages textes et être sûr de les recevoir tu pourrais utiliser des sockets TCP (un socket par client que tu stockerais dans ta liste à la place de l'IP), ou alors mettre en place un système de vérification de bonne réception, que le client renvoi l'info qu'il a bien reçu le packet sinon on lui renvoi. Enfin bon, rien ne sert de réimplémenter les fonctions de TCP par dessus UDP.

Regarde du côté de tes clients s'ils sont bien prêts à recevoir tes messages. Autrement je vois pas.
« Modifié: Février 03, 2017, 05:07:11 pm par Renardesque »

MasterPlow

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : N'envoie que au dernier client qui l'a contacté.
« Réponse #2 le: Février 03, 2017, 03:52:02 pm »
Oui, j'ai résolu le soucis, en ré-organisant mon code proprement :x

janf

  • Newbie
  • *
  • Messages: 45
    • Voir le profil
Re : N'envoie que au dernier client qui l'a contacté.
« Réponse #3 le: Février 03, 2017, 05:11:04 pm »
Cool :)
Est-ce que tu as découvert précisément quel était le problème, ou le ménage a résolu tout en gardant le mystère?

MasterPlow

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : N'envoie que au dernier client qui l'a contacté.
« Réponse #4 le: Février 03, 2017, 05:37:46 pm »
Le ménage a gardé le grand mystère :(

 

anything