2012-06-29 4 views
0

J'ai développé le code C suivant pour masquer les données avant de les renvoyer au client du serveur Web qui est un script java s'exécutant sur le navigateur Firefox en utilisant le protocole RFC 6455. Cependant, je suis confronté à un problème car je ne vois rien du côté client. Certains disent qu'il n'est pas nécessaire de masquer les données lors de l'envoi du serveur au client. Est-ce vrai ? Je ne peux pas voir ça fonctionner dans mon cas. Faites-moi savoir si ma question est ambigu quelque part. Merci pour votre aide.Envoi de données masquées du serveur de socket Web vers le client de socket Web

char frame[131],message[360]; 
strcpy(message,"Server here !");     
frame[0] = '\x81'; 
frame[1] = 128 + strlen(message); 
frame[2] = '\x00'; 
frame[3] = '\x00'; 
frame[4] = '\x00'; 
frame[5] = '\x00'; 
snprintf(frame+6, 124, "%s", message); 
printf("%s", frame); 
n = write(newsockfd, frame, strlen(frame)); 
+1

Cela ne fait aucun masquage RFC 6455 que je peux voir. Où sont les XOR? – EJP

+0

J'ai d'abord essayé d'envoyer des données non masquées pour voir si cela fonctionnait comme je l'ai lu dans RFC que les données du serveur peuvent être envoyées sans aucun masquage. Serait heureux si vous pouvez indiquer comment puis-je masquer et comment nous décidons des bits de masquage? –

+0

Votre question est intitulée «envoi de données masquées». Votre problème ne l'essaie même pas. Les questions brouillées n'aident personne. – EJP

Répondre

1

Ne pas utiliser la fonction strlen pour obtenir la longueur de quoi que ce soit, mais une chaîne C-style. Votre image n'est pas une chaîne de style C. La longueur de la trame est 6 + strlen(message), et non strlen(frame).

C'est aussi pourquoi printf("%s", frame); ne fonctionnait pas. Le spécificateur de format %s est pour les chaînes de style C, ce qui n'est pas le cas de votre cadre.

Cela suppose que votre message est une chaîne de style C. Sinon, vous avez d'autres bogues puisque vous utilisez strlen pour calculer sa longueur dans l'initialiseur pour frame[1].

+0

Merci beaucoup. Je vous ai trouvé! Je faisais une erreur en utilisant strlen (frame) dès que je l'ai remplacé avec 6 + strlen (message) cela a fonctionné exactement comme je voulais (données non masquées) Pouvez-vous m'aider comment envoyer des données masquées à un client quel client est capable de décoder (RFC 6455)? –

+0

Il suffit de suivre les spécifications. Si vous rencontrez des problèmes, posez des questions spécifiques. (Ou regardez autour d'une implémentation que quelqu'un d'autre a fait.) –

1

La longueur de l'image n'est pas donnée par strlen(), à cause des valeurs nulles incorporées. Ajoutez la longueur du message à la longueur du préfixe d'image. Mais où est le masquage?

+0

Merci. Pouvez-vous m'aider avec le masquage selon RFC 6455? J'ai d'abord essayé d'envoyer des données non masquées au début pour voir si cela fonctionnait. –

0

Je me demande pourquoi voudriez-vous masquer les trames envoyées au client?

Le RFC 6455 dit le texte suivant:

Un serveur ne doit pas masquer toutes les trames qu'il envoie à le client. Un client DOIT fermer une connexion s'il détecte une trame masquée .

Vérifiez la section 5.1 pour plus de détails.