Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Lolilolight le Novembre 06, 2016, 02:49:14 pm

Titre: Le client ne reçoit pas ma std::string
Posté par: Lolilolight 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.

Titre: [Résolu] Re : Le client ne reçoit pas ma std::string
Posté par: Lolilolight 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.