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

Auteur Sujet: Le client ne reçoit pas ma std::string  (Lu 2314 fois)

0 Membres et 1 Invité sur ce sujet

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Le client ne reçoit pas ma std::string
« le: Novembre 06, 2016, 02:49:14 pm »
Salut, j'essaye d'extraire un certificat d'openssl :

int Rsa::ossl_getCertificate (unsigned char** out) {
        return i2d_X509(x, out);
}
 

Pour l'envoyer à mon client.

void Network::sendPbKeyRsa(User &user) {
            unsigned char* out = nullptr;
            int length = EncryptedPacket::getCertificate(&out);
            std::string response (reinterpret_cast<char*>(out), length);
            Packet packet;
            packet<<response;
            user.getTcpSocket().send(packet);
            user.setHasPbKeyRsa(true);
        }
 

Mais à la réception ma chaîne de caractère est vide, le paquet est invalide car la taille de la chaîne est trop longue par rapport à la taille initiale du paquet.

if (clientTCP.receive(packet) == Socket::Done) {
                        packet>>message;
                        Network::setPbKey(message);
                        pbKeyRsaReceived = true;
 

De ce fait je n'ai pas de message et mon programme plante.
Pourtant cela marchait bien auparavant, y a t'il eu des changements ?
Faut il rajouter un \0 manuellement à la fin du tableau d'unsigned char ?
Bref je ne comprends plus rien car au départ ça fonctionnait bien et ici tout à coup ça ne fonctionne plus.


Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
[Résolu] Re : Le client ne reçoit pas ma std::string
« Réponse #1 le: Novembre 09, 2016, 09:14:26 pm »
C'est bon j'ai trouvé le problème et la solution : le serveur envoie un message vide au client entre temps, donc, j'ai fais précédé mes messages par un identifiant unique que je rajoute à l'envoi et à la réception je fais un test pour savoir si c'est le message que j'attendais qui est reçu ou un autre et enfin je retire l'identifiant.

 

anything